Koskamo

Exogram MCP

Exogram MCP provides a Universal FastMCP memory runtime that connects AI assistants like Claude Desktop and Cursor to an encrypted Personal Neural Network. It enables persistent memory storage and retrieval across personal, social, and professional spheres, allowing agents to maintain context and execute tasks using hybrid RRF search and graph traversal without stateless amnesia.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Exogram MCP logo, by ExogramCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Exogram
You need:Authenticate API and FastMCP requests with a Bearer API key generated in your workspace settings.
MCP endpoint (Streamable HTTP)
https://api.exogram.ai/mcp
Vendor documentation

What you can do with it

  • Connect Claude Desktop or Cursor to a persistent memory vault
  • Search personal neural network using hybrid RRF and graph traversal
  • Store facts and decisions into an encrypted truth ledger
  • Share memory between ChatGPT and Claude automatically

Source and maintenance

Community listingRegistry 0.2.3
Maintenance checked

Protocol and capabilities

Server
Exogram — Personal AI Agent & Workspace 2.2.0
MCP protocol
2025-06-18
Tools
22 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Official MCP bridge to Exogram (https://exogram.ai)—the Personal AI Agent and workspace that understands your work, people, and life, coordinates specialist agents, and executes tasks with your approval.

Tools

22 advertised

search_vault
Advertised by the server during the last successful anonymous check.

Semantic and keyword search across stored personal records, facts, and memories in the private vault.

search_vault input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "The search query to match against stored memories, project decisions, or preferences."
    },
    "top_k": {
      "type": "number",
      "default": 5,
      "description": "Number of results to return (1-20, default 5)."
    }
  }
}
search_memory_vault
Advertised by the server during the last successful anonymous check.

Search the Exogram Personal Neural Network and encrypted memory vault across facts, people, preferences, and commitments.

search_memory_vault input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "The search query to match against stored memories, relationships, or project context."
    },
    "top_k": {
      "type": "number",
      "default": 5,
      "description": "Number of results to return (1-20, default 5)."
    }
  }
}
store_memory
Advertised by the server during the last successful anonymous check.

Anchor a new fact, code convention, project invariant, or personal memory to your encrypted vault.

store_memory input schema
{
  "type": "object",
  "required": [
    "content"
  ],
  "properties": {
    "content": {
      "type": "string",
      "description": "The fact, note, or invariant content to persist."
    },
    "namespace": {
      "type": "string",
      "default": "default",
      "description": "Logical grouping for this memory (default: \"default\")."
    }
  }
}
update_memory_vault
Advertised by the server during the last successful anonymous check.

Persist or supersede a personal fact, commitment, or preference in your encrypted Exogram memory vault.

update_memory_vault input schema
{
  "type": "object",
  "required": [
    "content"
  ],
  "properties": {
    "content": {
      "type": "string",
      "description": "The fact, preference, or commitment to persist."
    },
    "namespace": {
      "type": "string",
      "default": "default",
      "description": "Logical grouping or sphere (\"work\", \"household\", \"personal\", or \"default\")."
    }
  }
}
get_neural_cluster
Advertised by the server during the last successful anonymous check.

Look up an entity in Exogram's Layer 2 Knowledge Graph. Returns connected entities and directional relationships.

get_neural_cluster input schema
{
  "type": "object",
  "required": [
    "entity_name"
  ],
  "properties": {
    "entity_name": {
      "type": "string",
      "description": "Name of the entity to look up (e.g., \"Next.js\", \"PostgreSQL\", \"SQLite WAL\")."
    }
  }
}
list_entities
Advertised by the server during the last successful anonymous check.

Retrieve active entities and concepts mapped in the personal knowledge network.

list_entities input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "default": 25,
      "description": "Maximum number of entities to return (default 25)."
    }
  }
}
check_action_safety
Advertised by the server during the last successful anonymous check.

Verify whether an agent action is safe and complies with active execution invariants before running.

check_action_safety input schema
{
  "type": "object",
  "required": [
    "action"
  ],
  "properties": {
    "action": {
      "type": "string",
      "description": "The action name (e.g. \"sql_execute\", \"file_delete\", \"api_call\")."
    },
    "params": {
      "type": "object",
      "description": "Parameters supplied to the action."
    }
  }
}
record_decision
Advertised by the server during the last successful anonymous check.

Record an execution decision into the tamper-evident cryptographic audit ledger.

record_decision input schema
{
  "type": "object",
  "required": [
    "action",
    "decision"
  ],
  "properties": {
    "action": {
      "type": "string",
      "description": "Action name."
    },
    "params": {
      "type": "object",
      "description": "Parameters supplied."
    },
    "reason": {
      "type": "string",
      "description": "Justification for the decision."
    },
    "decision": {
      "enum": [
        "PERMIT",
        "DENY"
      ],
      "type": "string",
      "description": "Action decision."
    }
  }
}
verify_audit_trail
Advertised by the server during the last successful anonymous check.

Verify the cryptographic SHA-256 hash chain integrity of the ledger from genesis to head.

verify_audit_trail input schema
{
  "type": "object",
  "properties": {}
}
query_graph
Advertised by the server during the last successful anonymous check.

Ask a natural language question against the knowledge graph and receive a structured answer with entity paths and gap analysis.

query_graph input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "The natural language question to ask, e.g. \"How is Governed Autonomy connected to Exogram?\" or \"What do I know about AI safety?\""
    },
    "max_hops": {
      "type": "number",
      "default": 2,
      "description": "Maximum traversal depth (1-4, default 2)."
    }
  }
}
gmail_search_messages
Advertised by the server during the last successful anonymous check.

Search personal or workspace emails via Gmail API with query syntax (read-only).

gmail_search_messages input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query using Gmail syntax (e.g., \"from:xAI compute\", \"is:unread\", \"subject:launch\")."
    },
    "max_results": {
      "type": "number",
      "default": 5,
      "description": "Maximum number of messages to return (1-20, default 5)."
    }
  }
}
gmail_create_draft
Advertised by the server during the last successful anonymous check.

Create an email draft in Gmail. Does NOT send the email without explicit user confirmation.

gmail_create_draft input schema
{
  "type": "object",
  "required": [
    "to",
    "subject",
    "body"
  ],
  "properties": {
    "cc": {
      "type": "string",
      "description": "Optional CC recipient email address."
    },
    "to": {
      "type": "string",
      "description": "Recipient email address."
    },
    "body": {
      "type": "string",
      "description": "Body content (plain text or markdown)."
    },
    "subject": {
      "type": "string",
      "description": "Subject line of the draft email."
    }
  }
}
drive_search_files
Advertised by the server during the last successful anonymous check.

Search documents, presentations, and files in Google Drive (read-only).

drive_search_files input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Search terms or MIME filters (e.g., \"xAI compute\", \"type:presentation\")."
    },
    "max_results": {
      "type": "number",
      "default": 5,
      "description": "Maximum files to return (1-20, default 5)."
    }
  }
}
drive_create_presentation
Advertised by the server during the last successful anonymous check.

Create a new Google Slides presentation draft with structured slides.

drive_create_presentation input schema
{
  "type": "object",
  "required": [
    "title",
    "slides"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "Title of the presentation."
    },
    "slides": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "bullet_points"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Slide title"
          },
          "bullet_points": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Key bullet points for the slide"
          }
        }
      },
      "description": "Array of slide definitions."
    }
  }
}
calendar_list_events
Advertised by the server during the last successful anonymous check.

List upcoming meetings, agenda items, and schedule availability from Google Calendar (read-only).

calendar_list_events input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query or event keyword (e.g., \"xAI sync\", \"Migration\", \"Team standup\")."
    },
    "max_results": {
      "type": "number",
      "default": 5,
      "description": "Maximum number of events to return (1-20, default 5)."
    }
  }
}
calendar_create_meeting
Advertised by the server during the last successful anonymous check.

Draft a new Google Calendar meeting invite. Does NOT send invites without explicit user confirmation.

calendar_create_meeting input schema
{
  "type": "object",
  "required": [
    "title",
    "start_time",
    "end_time"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "Meeting title or summary."
    },
    "end_time": {
      "type": "string",
      "description": "ISO-8601 end timestamp (e.g., \"2026-09-17T14:45:00Z\")."
    },
    "attendees": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of attendee email addresses."
    },
    "start_time": {
      "type": "string",
      "description": "ISO-8601 start timestamp (e.g., \"2026-09-17T14:00:00Z\")."
    },
    "description": {
      "type": "string",
      "description": "Meeting agenda or description."
    }
  }
}
github_search_issues
Advertised by the server during the last successful anonymous check.

Search issues and pull requests across connected GitHub repositories (read-only).

github_search_issues input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "repo": {
      "type": "string",
      "description": "Repository in format \"owner/repo\" (e.g., \"Richard-Ewing/exogram\")."
    },
    "query": {
      "type": "string",
      "description": "Search term or query syntax (e.g., \"is:open label:bug\", \"cluster sync\")."
    }
  }
}
github_create_pr_draft
Advertised by the server during the last successful anonymous check.

Draft a GitHub Pull Request proposal. Does NOT open or publish the PR without explicit user approval.

github_create_pr_draft input schema
{
  "type": "object",
  "required": [
    "repo",
    "title",
    "head",
    "body"
  ],
  "properties": {
    "base": {
      "type": "string",
      "default": "main",
      "description": "Target base branch (default: \"main\")."
    },
    "body": {
      "type": "string",
      "description": "Detailed PR description and change summary."
    },
    "head": {
      "type": "string",
      "description": "Feature or working branch name."
    },
    "repo": {
      "type": "string",
      "description": "Repository in format \"owner/repo\"."
    },
    "title": {
      "type": "string",
      "description": "Pull request title."
    }
  }
}
notion_search_pages
Advertised by the server during the last successful anonymous check.

Search pages and databases in the user connected Notion workspace.

notion_search_pages input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Search keywords or topic to find in Notion."
    },
    "filter_type": {
      "enum": [
        "page",
        "database"
      ],
      "type": "string",
      "description": "Optional filter: \"page\" or \"database\"."
    }
  }
}
notion_append_block
Advertised by the server during the last successful anonymous check.

Draft new content or notes to append into an existing Notion page. Gated by explicit user approval.

notion_append_block input schema
{
  "type": "object",
  "required": [
    "page_id",
    "content"
  ],
  "properties": {
    "content": {
      "type": "string",
      "description": "Markdown content or structured notes to append."
    },
    "page_id": {
      "type": "string",
      "description": "Target Notion page identifier or title."
    },
    "block_type": {
      "type": "string",
      "default": "paragraph",
      "description": "Type of block: \"paragraph\", \"bulleted_list_item\", or \"callout\"."
    }
  }
}
slack_list_channels
Advertised by the server during the last successful anonymous check.

List accessible channels in the connected Slack workspace.

slack_list_channels input schema
{
  "type": "object",
  "properties": {
    "types": {
      "type": "string",
      "default": "public_channel",
      "description": "Channel types to list (e.g. \"public_channel,private_channel\")."
    }
  }
}
slack_post_message_draft
Advertised by the server during the last successful anonymous check.

Draft a message to a Slack channel. Does NOT post without explicit user approval.

slack_post_message_draft input schema
{
  "type": "object",
  "required": [
    "channel",
    "message"
  ],
  "properties": {
    "channel": {
      "type": "string",
      "description": "Target channel name or ID (e.g. \"#general\", \"#engineering\")."
    },
    "message": {
      "type": "string",
      "description": "Message body or announcement content."
    },
    "thread_ts": {
      "type": "string",
      "description": "Optional parent thread timestamp for threaded replies."
    }
  }
}

Prompts

2 advertised

exogram_context_brief — Personal Context Brief

Advertised by the server during the last successful anonymous check.

Gather relevant background across your work, people, and life priorities before drafting or deciding.

topic
Project, person, meeting, or decision you want context on. (required)
exogram_action_plan — Approval-Ready Action Plan

Advertised by the server during the last successful anonymous check.

Turn a plain-English goal into an approval-gated plan grounded in your Exogram context and safety checks.

goal
Outcome or task you want Exogram to prepare. (required)

Resources

2 advertised

Personal Vault Summary

Advertised by the server during the last successful anonymous check.

High-level overview of stored memories and user context in Exogram.

Personal Vault Summary URI
exogram://vault/summary

MIME type: application/json

Knowledge Graph Entities

Advertised by the server during the last successful anonymous check.

Current topological entity nodes and relationship categories.

Knowledge Graph Entities URI
exogram://graph/entities

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2933 ms
95th percentile latency
2933 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2933 ms · metadata changed · 22 tool(s), 2 resource(s), 0 resource template(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http exogram-mcp https://api.exogram.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add exogram-mcp --url https://api.exogram.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable exogram-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "exogram-mcp": {
      "url": "https://api.exogram.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "exogram-mcp": {
      "type": "streamableHttp",
      "url": "https://api.exogram.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start exogram-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "exogram-mcp": {
      "type": "http",
      "url": "https://api.exogram.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http exogram-mcp https://api.exogram.ai/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "exogram-mcp": {
      "url": "https://api.exogram.ai/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "exogram-mcp": {
      "serverUrl": "https://api.exogram.ai/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Exogram MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.