FactoGraph

Memory for AI agents: facts a person approved, each with a link, and answers that cite them.

使うべきか

品質と安全性

A
説明の品質
93%
スキーマの完全性
96%
命名の品質
94%
ポイズニングのリスク
100%
権限の一致
100%
プロトコルへの準拠
100%

検出事項(1)

  • LOWTool 'listFacts' description lacks action verblistFacts 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~1,732トークン数(ツール定義)
~1.8 KB一般的なレスポンスサイズ
注意への影響は中程度(128k コンテキストの 1.35%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "factograph": {
      "url": "https://api.factograph.app/api/mcp"
    }
  }
}

リモートエンドポイント

https://api.factograph.app/api/mcpstreamable-http
https://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"
  ]
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 7 件