FactoGraph
Memory for AI agents: facts a person approved, each with a link, and answers that cite them.
사용해야 할까요
품질 및 안전성
발견 사항 (1)
- LOWlistFacts에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"factograph": {
"url": "https://api.factograph.app/api/mcp"
}
}
}원격 엔드포인트
https://api.factograph.app/api/mcpstreamable-httphttps://api.factograph.app/api/k/{store_id}/mcpstreamable-http할 수 있는 일
도구 목록
도구 (7)
🟢getManual(store)
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",
"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."
}
},
"required": []
}🟢listFacts(store)
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",
"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."
}
},
"required": []
}🟢ask(store, question)
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",
"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."
}
},
"required": [
"question"
]
}🔴startStep(store, step, body)
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",
"properties": {
"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."
},
"step": {
"type": "string",
"enum": [
"propose",
"add",
"documents",
"ask",
"remove"
],
"description": "The step to run."
},
"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."
},
"title": {
"type": "string",
"description": "documents: the document's title."
},
"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."
},
"question": {
"type": "string",
"description": "ask: the question."
},
"facts": {
"type": "array",
"items": {
"type": "string"
},
"description": "add: the approved facts. remove: fact ids, F<n> numbers or exact words."
},
"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."
},
"replace": {
"type": "array",
"items": {
"type": "string"
},
"description": "add: stored fact ids the person chose to replace."
},
"keep_both": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "add: [new fact, stored fact] pairs the person says are both true."
},
"confirm": {
"type": "boolean",
"description": "remove: true to delete, after the person confirmed."
}
}
}
},
"required": [
"store",
"step",
"body"
]
}🟢getStep(store, run_id)
Where a running step is now: its next prompt, or its result.
입력 스키마
{
"type": "object",
"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."
}
},
"required": [
"run_id"
]
}🔴replyToPrompt(store, run_id, call_id, reply)
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",
"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."
},
"call_id": {
"type": "string",
"description": "The prompt's call_id."
},
"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."
}
},
"required": [
"run_id",
"call_id",
"reply"
]
}🟡createStore(person_agreed)
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",
"properties": {
"person_agreed": {
"type": "boolean",
"description": "true: the person asked for a store, or said yes when you offered one."
}
},
"required": [
"person_agreed"
]
}커뮤니티
증거