Memory for AI agents: facts a person approved, each with a link, and answers that cite them.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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`.
The person's question.
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.
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`.
| Argument | Type | Description |
|---|---|---|
| store | string | 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* | string | The person's question. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| person_agreed* | boolean | true: the person asked for a store, or said yes when you offered one. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| store | string | 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. |
{
"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."
}
}
}Where a running step is now: its next prompt, or its result.
| Argument | Type | Description |
|---|---|---|
| store | string | 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* | string | The step's run_id. |
{
"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."
}
}
}Every fact in the store, numbered, each number a link to the fact. Cite a fact as its number with its link, [F3](<link>).
| Argument | Type | Description |
|---|---|---|
| store | string | 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. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| reply* | string | Your answer: the JSON object the reply_schema asks for, written as JSON text - or plain text when there is no schema. |
| store | string | 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* | string | The step's run_id. |
| call_id* | string | The prompt's call_id. |
{
"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."
}
}
}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`.
| Argument | Type | Description |
|---|---|---|
| body* | object | |
| step* | string | The step to run. |
| store* | string | The person's private store link, as they gave it: https://.../api/k/<id> or https://.../#/store/<id>. Public links are read-only. |
{
"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."
}
}
}