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개