FactoGraph MCP
FactoGraph provides AI agents with a memory system that stores approved facts with citations and links. It enables agents to list facts, ask questions, and generate answers that cite specific stored facts, ensuring verifiable and contradiction-checked information across conversations and tools.
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.
https://api.factograph.app/api/mcpWhat you can do with it
- List facts from a public or private store
- Ask questions and receive cited answers
- Create new personal knowledge stores
- Check proposed actions against stored facts
Source and maintenance
Protocol and capabilities
- Server
- factograph-public 0.1.0
- MCP protocol
- 2025-06-18
- Tools
- 7 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
getManual — Read a store's manual
The store's manual - how to run its steps and cite its facts - and what it holds: how many facts, from which sources. Read it before the store's other tools, and follow it.
{
"type": "object",
"required": [],
"properties": {
"store": {
"type": "string",
"description": "The store's link, as the person gave it: a public link (https://.../api/p/<id> or https://.../#/public/<id>, or its public id) or the person's private link (https://.../api/k/<id> or https://.../#/store/<id>). Leave it out to read the FactoGraph guide, a public store about FactoGraph itself."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}listFacts — List every fact
Every fact in the store, numbered, each number a link to the fact. Cite a fact as its number with its link, [F3](<link>).
{
"type": "object",
"required": [],
"properties": {
"store": {
"type": "string",
"description": "The store's link, as the person gave it: a public link (https://.../api/p/<id> or https://.../#/public/<id>, or its public id) or the person's private link (https://.../api/k/<id> or https://.../#/store/<id>). Leave it out to read the FactoGraph guide, a public store about FactoGraph itself."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}ask — Ask a store
Ask a question; the store answers only from its facts, each claim linked to its fact, and checks the answer against them. Stores nothing. Returns the step's state: `waiting` (a prompt to do and answer with replyToPrompt), `running` (call getStep), `done` (do what `next` says) or `failed`.
{
"type": "object",
"required": [
"question"
],
"properties": {
"store": {
"type": "string",
"description": "The store's link, as the person gave it: a public link (https://.../api/p/<id> or https://.../#/public/<id>, or its public id) or the person's private link (https://.../api/k/<id> or https://.../#/store/<id>). Leave it out to read the FactoGraph guide, a public store about FactoGraph itself."
},
"question": {
"type": "string",
"description": "The person's question."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}startStep — Start a step in the person's store
Start a step - propose, add, documents, ask or remove - in a private store, with its JSON body, as the manual says. propose stores nothing; add stores only facts the person approved, with propose's proposal_id and their reply as confirmation; remove deletes only with confirm true, after the person confirmed. Returns the step's state: `waiting` (a prompt to do and answer with replyToPrompt), `running` (call getStep), `done` (do what `next` says) or `failed`.
{
"type": "object",
"required": [
"store",
"step",
"body"
],
"properties": {
"body": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "propose: the person's message. documents: the document's text, or one part of it - at most the manual's per-call limit; longer text goes in parts."
},
"facts": {
"type": "array",
"items": {
"type": "string"
},
"description": "add: the approved facts. remove: fact ids, F<n> numbers or exact words."
},
"title": {
"type": "string",
"description": "documents: the document's title."
},
"confirm": {
"type": "boolean",
"description": "remove: true to delete, after the person confirmed."
},
"part_of": {
"type": "string",
"description": "documents: the first part's document_id, for every later part. Send parts in order, one at a time, each after the previous part's result."
},
"replace": {
"type": "array",
"items": {
"type": "string"
},
"description": "add: stored fact ids the person chose to replace."
},
"question": {
"type": "string",
"description": "ask: the question."
},
"keep_both": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "add: [new fact, stored fact] pairs the person says are both true."
},
"proposal_id": {
"type": "string",
"description": "add: from propose's result."
},
"confirmation": {
"type": "string",
"description": "add: the person's approving reply, quoted."
},
"conversation_id": {
"type": "string",
"description": "add: from propose's result."
}
}
},
"step": {
"enum": [
"propose",
"add",
"documents",
"ask",
"remove"
],
"type": "string",
"description": "The step to run."
},
"store": {
"type": "string",
"description": "The person's private store link, as they gave it: https://.../api/k/<id> or https://.../#/store/<id>. Public links are read-only."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}getStep — Follow a step
Where a running step is now: its next prompt, or its result.
{
"type": "object",
"required": [
"run_id"
],
"properties": {
"store": {
"type": "string",
"description": "The store's link, as the person gave it: a public link (https://.../api/p/<id> or https://.../#/public/<id>, or its public id) or the person's private link (https://.../api/k/<id> or https://.../#/store/<id>). Leave it out to read the FactoGraph guide, a public store about FactoGraph itself."
},
"run_id": {
"type": "string",
"description": "The step's run_id."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}replyToPrompt — Answer a step's prompt
Answer the prompt a step is waiting on - do the model work in its `system` and `messages` first. Keep answering until the step is done or failed.
{
"type": "object",
"required": [
"run_id",
"call_id",
"reply"
],
"properties": {
"reply": {
"type": "string",
"description": "Your answer: the JSON object the reply_schema asks for, written as JSON text - or plain text when there is no schema."
},
"store": {
"type": "string",
"description": "The store's link, as the person gave it: a public link (https://.../api/p/<id> or https://.../#/public/<id>, or its public id) or the person's private link (https://.../api/k/<id> or https://.../#/store/<id>). Leave it out to read the FactoGraph guide, a public store about FactoGraph itself."
},
"run_id": {
"type": "string",
"description": "The step's run_id."
},
"call_id": {
"type": "string",
"description": "The prompt's call_id."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}createStore — Make a store for the person
A new, empty FactoGraph store of the person's own: its private link, which these tools take as `store`. Only after the person said yes to having one. Nothing is stored until the link is first opened. The link is the store's key: give it to them once, and never put it anywhere public.
{
"type": "object",
"required": [
"person_agreed"
],
"properties": {
"person_agreed": {
"type": "boolean",
"description": "true: the person asked for a store, or said yes when you offered one."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 1028 ms
- 95th percentile latency
- 1028 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1028 ms · metadata changed · 7 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http factograph-mcp https://api.factograph.app/api/mcpCodex
codex mcp add factograph-mcp --url https://api.factograph.app/api/mcpCursor
{
"mcpServers": {
"factograph-mcp": {
"url": "https://api.factograph.app/api/mcp"
}
}
}Cline
{
"mcpServers": {
"factograph-mcp": {
"type": "streamableHttp",
"url": "https://api.factograph.app/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"factograph-mcp": {
"type": "http",
"url": "https://api.factograph.app/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http factograph-mcp https://api.factograph.app/api/mcpClaude Desktop
{
"mcpServers": {
"factograph-mcp": {
"url": "https://api.factograph.app/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"factograph-mcp": {
"serverUrl": "https://api.factograph.app/api/mcp"
}
}
}Let your agent find its tools
Find servers like FactoGraph MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run FactoGraph MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.