stigmergy
Captures notes, meeting transcripts, and documents submitted via Slack, and uses Slack for steward approval of new entities.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@stigmergywhat did we decide about the API design?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Stigmergy is the team version of the wiki in Karpathy's gist. Immutable source material enters one queue, one librarian agent keeps a small Git-and-Markdown wiki current, and every search and answer is scoped to what the caller may see.
Ants coordinate by leaving traces in the environment, not by talking to each other. Here every capture is a trace — a person reacting in Slack, an agent finishing a task in Claude Code — the librarian follows the traces, and the wiki emerges. Nobody approves a queue.
Why
A one-person wiki works because the loop is tiny. Once several people and agents write to the same wiki, you need what a shared deployment forces on you: identity, visibility, concurrency, binary evidence, Slack, audit. Stigmergy adds exactly that and nothing that duplicates the loop.
Capture where the work happens | Agents through the MCP bridge, people through a |
Evidence you can trust | Exact bytes in a private store; one immutable source page per capture. |
A librarian that files | Creates, rewrites, consolidates, and deletes pages without approval. |
Answers with receipts | Hybrid search and |
Visibility on writes too | Restricted evidence never shapes a page a broader audience can read. |
Honest contradictions | Conflicting claims stay explicit, dated, and cited. |
Self-healing corpus | A scheduled gardener repairs through the same gates. No human to-do list. |
Full audit | One operation, one commit, one change record with the exact patch. |
Related MCP server: sourcebook
How it works
Capture. Thin adapters authenticate and acquire bytes. Local files and private Google Drive documents stay on your machine until uploaded through a presigned URL.
Queue. Every adapter produces the same kind-free
CaptureEnvelope. The Postgres queue is durable, leased, and idempotent per actor and client key.Write. One serialized writer extracts text, renders the immutable source page, asks the librarian for a
FilingPlan, and advances the branch only when every gate passes. A source may produce zero or more knowledge mutations: the graph unit is a reusable idea, not the document that happened to contain it.Remember. The knowledge repository is plain Git and Markdown. Postgres is operational state and a rebuildable index, never a second wiki.
Read. Five MCP tools for agents,
@brainfor people, one visibility policy. A webhook indexes incrementally; a nightly full rebuild guarantees convergence.
The write path
States are queued → processing → landed | failed. Nothing waits for a human: ambiguity becomes
an explicit contradiction, technical failures retry within a bounded lease, and a terminal failure
carries a typed error the master can retry. A crash after the commit is reconciled by commit SHA,
never by a second commit.
The librarian may create or rewrite a note or concept, consolidate and delete a redundant page,
propose an entity claim, add or resolve a contradiction, or file nothing — the source still lands.
It never rewrites sources/ and never broadens an ACL. Deletion is a separate explicit operation
(brain_delete) through the same writer and gates.
Each accepted knowledge mutation must be readable without reopening the source: it states the supported conclusion, gives local source attribution, and explains every material page or entity relationship in prose. A plan rejected by deterministic writer gates may receive one bounded replacement-plan request using the same source, safe context, and exact violations; the replacement supersedes the complete plan or nothing. If it also fails, the writer commits only the immutable source and reports the plan as rejected; it never leaves a partial derived graph.
The knowledge model
Role | Location | Mutable by filing? | Meaning |
Note |
| yes | contextual conclusion, decision, or event |
Concept |
| yes | durable explanatory knowledge |
Entity identity |
| entity primitives only | opaque ID and scoped name claims |
Source |
| no | immutable evidence for one capture |
A note or concept carries a maturity (seed, developing, mature, evergreen), an optional
ACL, entity anchors, and its sources:
---
id: page_aurora_renewal
type: note
title: Aurora renewal
status: mature
created: 2026-08-10
updated: 2026-08-10
acl:
- sales
entity:
- ent_11111111-1111-4111-8111-111111111111
sources:
- sources/2026/08/20000000-0000-4000-8000-000000000002.md
---
# Aurora renewal
Aurora Systems agreed to an annual renewal with a budget of EUR 120,000. The renewed term starts
on 15 September 2026.Entities are opaque IDs with scoped, sourced name claims; facts live in notes and concepts and
describe_entity composes a bounded reader-scoped dossier with excerpts, local sources, and authored
relationships at read time. The raw identity record is intentionally not a human dossier; one
describe_entity call supplies the visible material a client needs to render What / Who, Facts,
and Connections, with explicit truncation when the ACL-visible result is capped. Merging needs a shared external ID or an exact
assertion in a source — resemblance does nothing.
When credible sources disagree, the librarian keeps both claims in a strict marker on the narrowest page whose readers may see both:
> [!WARNING] Unresolved contradiction `con_3f1c2b9a-6d4e-4a2b-9c1d-2f7e8a9b0c1d`
> The two renewal sources disagree on the annual budget.
> - **Claim:** The annual renewal budget is EUR 120,000
> **Date:** `2026-08-10`
> **Source:** `sources/2026/08/20000000-0000-4000-8000-000000000002.md`
> - **Claim:** The annual renewal budget is EUR 95,000
> **Date:** `2026-08-18`
> **Source:** `sources/2026/08/40000000-0000-4000-8000-000000000004.md`A master may later submit a resolution; it is an ordinary capture, and the marker goes away only
when the new evidence actually resolves it. Direct and local MCP submissions use the optional
resolution_of="con_<uuid>" argument. The writer accepts it only from the master, only for that
exact visible marker, and only at a safe audience; an unauthorized attempt still archives its source
but applies none of the librarian plan.
Using it
From Claude Code or Codex
Install the bridge once per machine and point it at your deployment. It proxies the read tools to the cloud and acquires local files, public URLs, and private Google Drive documents locally.
uv tool install git+https://github.com/sturlese/stigmergy.git
export STIGMERGY_TOKEN="<identity-token>"Claude Code, .mcp.json:
{
"mcpServers": {
"stigmergy-bridge": {
"command": "stigmergy-bridge",
"args": ["--url", "https://stigmergy.example.com"],
"env": {
"STIGMERGY_TOKEN": "${STIGMERGY_TOKEN}",
"STIGMERGY_GOOGLE_CLIENT_SECRETS": "${STIGMERGY_GOOGLE_CLIENT_SECRETS:-}"
}
}
}
}Codex, .codex/config.toml:
[mcp_servers.stigmergy-bridge]
command = "stigmergy-bridge"
args = ["--url", "https://stigmergy.example.com"]
env_vars = ["STIGMERGY_TOKEN", "STIGMERGY_GOOGLE_CLIENT_SECRETS"]
required = trueYou say | What happens |
"Save the conclusions to the brain." |
|
"File ~/Downloads/board-deck.pdf." | The bridge uploads the bytes; the worker extracts, OCRs scanned pages, files. |
"Capture https://docs.google.com/document/d/…" | Local Google OAuth, token in your keychain, DOCX export uploaded. |
"What did we decide about the Aurora renewal?" |
|
The same tools and the same token rules apply whether a person is driving the session or an
agent runs on its own after a task. Private Drive needs
STIGMERGY_GOOGLE_CLIENT_SECRETS=/absolute/path/google-oauth-client.json.
The bridge is transport and local acquisition, not a second knowledge compiler. It forwards the
same describe_entity projection and filing contract as the cloud MCP server.
From Slack
Ask:
@brain what is the status of the Borealis rollout?in a mapped channel. If you can see more than the channel, the extra follows up privately.Capture: react with
:brain:on a thread. Speakers, timestamps, permalinks, and attachments become one capture under the channel's audience. Unmapped channels and unauthorized reactors capture nothing.
Channels map to audiences in ops/slack-channels.json; the app manifest is
deploy/slack-app-manifest.json.
From the backoffice
/admin on the app process, enabled by STIGMERGY_ADMIN_TOKEN_HASH, one master identity.
View | |
Captures | paste, upload, public URL; provenance, extraction, retries, commit, change |
Changes | plain-language summary, per-path diff, exact Git patch on demand |
Contradictions | live list from current Markdown, resolution form |
Entities | scoped claims and provenance, evidence-backed merge and delete |
Gardener | run history and a manual trigger |
Index health | repository HEAD vs indexed commit, dirty flag, last full rebuild |
MCP tools
The cloud server and the local bridge expose the same surface:
Tool | |
| hybrid lexical + vector search |
| one visible page with links and citations |
| a cited, verified answer — or an honest refusal |
| identities with a name you may see |
| bounded evidence-rich dossier composed from visible pages |
| capture one input; the optional contradiction ID is master-only |
| capture progress |
| explicit deletion with reference sweep |
There is no kind. path and private Drive exist only in the bridge. An omitted audience uses
your configured default, never organization-wide by accident.
Visibility and security
Every identity — whoever or whatever holds the token — has groups and a default audience in the knowledge repository's
ops/identities.json; a page'saclisnullor a list of groups.brain-adminsis unrestricted.One policy for reads and writes:
server.acl.visible,kernel.acl.flows_into, and the write guard. A restricted capture gets a restricted companion page; open pages are never rewritten from narrower evidence.Unknown, hidden, and unauthorized pages, entities, and captures look identical from outside.
Per-user bearer tokens from
stigmergy-issue-token; the server keeps only SHA-256 hashes. The cloud never sees Google credentials; clients never see the object store.Captured content is data, never instructions. The answer verifier is pure code; adversarial tests keep it that way.
Public fetching blocks private and metadata destinations and revalidates every redirect. Parsers detect types from bytes and enforce size, page, and decompression limits.
Secrets, tokens, presigned URLs, bytes, and restricted titles never enter logs. CI runs
gitleaks.
Report vulnerabilities privately: SECURITY.md.
Models
One OPENROUTER_API_KEY, a closed allowlist in kernel.llm, no model fallback or direct
alternate-provider credentials, and zero-data retention. Direct Anthropic, OpenAI, or Gemini
credentials are rejected. The librarian uses strict provider-native JSON Schema through the fastest
compatible zero-data-retention OpenRouter host, with same-model provider fallback. One coherent agent reads the source and safe graph context and
decides page boundaries, prose, links, entities, and contradictions together. A normal filing uses one
request; one bounded correction may repair a failed mechanical writer contract. Both requests use the
same deepseek/deepseek-v4.1-flash route. Provider requests require supported parameters, deny data collection,
and require zero-data-retention processing. Librarian reasoning is minimal and excluded from output.
Its output ceiling is 40960 tokens and is sent to OpenRouter as max_tokens. If the bounded correction
cannot satisfy writer gates, the draft is never applied.
Retryable failures use the existing bounded queue-attempt policy; answer and OCR requests retain
same-model provider failover.
POST /admin/api/knowledge/recompile is a separate master-only control: it rebuilds derived notes,
concepts, links, entity anchors, and structured entity knowledge from immutable sources in one isolated worktree. It
reports source count, page mutations, retained identities, link health, request count, and final
commit; valid source-backed identities are never auto-pruned, and any failed source or gate abandons
the complete rebuild. A recompile is a GardenRequest in recompile mode and records its commit
under the existing garden ledger trigger, so the ledger contract remains one coherent mutation
history rather than adding a second change type.
Before release or deployment, the real-model parity artifact MUST pass
python evals/filing/parity.py --artifact <result.json>; a non-zero result blocks rollout. It
requires identical corpus, initial graph, source-case hashes, Stigmergy commit and librarian-skill
hashes across runs; replay-verified draft/revision telemetry and raw gates; a provenance-bearing blind
review; and a reasoning matrix that proves the selected Stigmergy level is the lowest passing level.
Schema v5 parity evidence is required; earlier schemas cannot prove the bounded-correction trigger and
complete candidate binding. Hippocampus is retained
as comparative, replay-verified baseline evidence and is not a Stigmergy admission candidate.
Purpose | Model |
filing and bounded contract correction |
|
cited answers |
|
embeddings |
|
OCR |
|
Query embeddings are bounded. A provider timeout degrades that request to ACL-scoped lexical ranking; indexing remains strict and never accepts an incomplete vector build. Serving connections — HTTP requests and the Slack adapter — bound every Postgres statement; workers and rebuilds keep the database default.
Quality and tests
The keyless suite — 1,100+ tests over real Postgres and Git, fake models, 75% coverage gate — is
the contract. Optional real-model evaluations run over a frozen corpus and append to
evals/history.ndjson. Latest run (2026-08-24):
Measure | Result | Bar |
Retrieval Recall@5 (15 questions, 9 ACL-filtered) | 1.00 | ≥ 0.80 |
Answer honesty | 1.00 | ≥ 0.90 |
Answer groundedness | 1.00 | ≥ 0.84 |
False-premise refutation | 1.00 | — |
make retrieval-golden EMBEDDER=openrouter
make qa-golden EMBEDDER=openrouter LLM=openrouter
make gatesQuick start
Python 3.12+, uv, Docker.
git clone https://github.com/sturlese/stigmergy.git && cd stigmergy
make venv
make db-up # Postgres + pgvector, MinIO
make test
make lintIndex a knowledge repository and serve it over stdio:
export STIGMERGY_INDEX_DSN=postgresql://stigmergy:stigmergy@localhost:54321/stigmergy
stigmergy-index --rebuild --repo ../stigmergy-brain --embedder fake
stigmergy-server --transport stdio --repo ../stigmergy-brain \
--identity you@example.com --embedder fakeDeployment
One image, three Fly process groups:
Process | Command | Role |
|
| MCP over HTTP, uploads, index webhook, backoffice |
|
| the only writer and the scheduled gardener |
|
| Socket Mode adapter, one active instance |
make deploy-staging
make rebuild-stagingArea | Variables |
Models |
|
Database |
|
Evidence store |
|
Server |
|
Backoffice |
|
Writer |
|
Index webhook |
|
Slack |
|
Your team's knowledge is a separate private repository:
your-brain/
├── sources/YYYY/MM/<capture-id>.md
├── wiki/
│ ├── notes/
│ ├── concepts/
│ └── entities/ent_<uuid>.md
├── ops/
│ ├── identities.json people, groups, default audience
│ ├── slack-channels.json channel id → audience
│ └── entity-registry.json derived, written by the platform
├── .claude/skills/librarian/SKILL.md
└── .github/workflows/ nightly index rebuildOnly the writer's GitHub App identity commits to wiki/, sources/, and the registry. Runbook:
docs/OPERATIONS.md; reset: docs/RESET.md.
Repository layout
Package | |
| ACL flow, deadlines, the model boundary, normalization |
| envelopes, evidence, uploads, extraction and OCR, queue, sources |
| the local stdio MCP client |
| page contracts, |
| opaque identities, claims, registry, merge, rename, delete |
| exact patches and the change ledger |
| corpus selection, ranking, incremental updates, full rebuild, health |
| MCP tools, HTTP transport, webhook, verified answers |
| Socket Mode adapter |
| the master backoffice |
| the writer process, bootstrap, Git and GitHub App transport, schedule |
| the guarded non-production reset |
Design principles
Git and Markdown are current knowledge; Postgres is a rebuildable index.
Every adapter produces the same kind-free
CaptureEnvelope.Original bytes and source pages are immutable except through explicit deletion.
One serialized writer: one commit and one change record per operation.
Visibility is a write constraint.
The librarian owns notes and concepts; each source can produce zero or more reusable, connected ideas, while entity pages hold identity only.
No write waits for a human. Uncertainty is represented honestly.
A health finding is preventable or autonomously repairable, or it is not a finding.
Every capability is reachable through Slack, MCP, or the backoffice.
Rationale and acceptance criteria: specs/karpathy-team-wiki.md.
Documentation
Apache License 2.0.
Available Tools
8 toolsaskB
Answer from ACL-visible team knowledge with citations.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns citations, which is a useful behavioral trait. However, it does not mention any access limitations, error conditions, or whether it is a read-only operation. Given the simplicity, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core purpose without any fluff. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and there is only one parameter, the description is fairly complete. It specifies the scope (ACL-visible knowledge) and the output characteristic (citations). It does not need to explain return format since the output schema handles that. A minor gap is the lack of any mention of usage context, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the description must explain the 'question' parameter. The description implies the question is the input but does not add any details about format, length, or constraints. It adds minimal value beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool answers from ACL-visible team knowledge and includes citations. It is specific about the resource (team knowledge) and the output (answer with citations). However, it does not explicitly differentiate from sibling tools like search_brain, so it lacks a clear distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions or conditions for using search_brain or read_page. The implied use case (asking a question) is present but not explicitly framed against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_deleteC
Queue an authorized explicit page or source deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| why | Yes | ||
| paths | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal that the operation is queued and authorized, but it does not state whether the deletion is permanent, reversible, requires approval, or how the result of the queued operation can be observed. For a destructive tool, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the core action is front-loaded. It is concise and easy to parse quickly, though it sacrifices useful semantic detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, this is a destructive, queued mutation with no annotations and two required parameters. The description leaves critical contextual unknowns: what 'authorized' means, what path formats are valid, why the 'why' parameter is required, and what happens after queueing. This is not complete enough for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no property descriptions and schema description coverage is 0%, so the description must compensate. It hints that 'paths' refer to pages or sources, but it never explains the 'why' parameter, its purpose, format, or required content. The description adds only minimal meaning beyond the raw schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Queue', and names the resource, 'page or source deletion', which tells an agent what the tool does. It is distinguishable from sibling tools like read_page, search_brain, and brain_submit. However, the qualifiers 'authorized' and 'explicit' are ambiguous and slightly obscure the exact nature of the deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or conditions that would lead an agent to choose brain_delete instead of read_page or brain_submit. The only usage signal is the word 'deletion', which is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_submissionsA
List queued, processing, landed, or failed submissions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the behavioral burden. 'List' implies a read-only operation, and the status scope is stated, but the description does not explicitly confirm no side effects, nor does it explain how the status filter behaves when empty or how the output is ordered/paginated. The output schema covers the return shape, but behavioral details remain thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and immediately specifies the status scope. Every word earns its place; there is no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return values are covered. But with no annotations, no parameter descriptions, and no usage guidance, the description leaves gaps around default behavior and when to choose this tool over siblings. Adequate, but not fully complete for an agent operating autonomously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It does add meaning to the status parameter by listing the four possible statuses, which is helpful. However, it says nothing about the limit parameter or its default, nor about how an empty status is interpreted. The compensation is partial at best.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('submissions') and enumerates the exact statuses covered (queued, processing, landed, failed). This clearly distinguishes it from sibling tools like brain_submit or brain_delete, which imply write operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The status enumeration implies a monitoring use-case, but there is no explicit guidance on when to use this tool versus alternatives like search_brain or list_entities. No when-not-to-use or exclusion conditions are stated, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brain_submitA
Submit exactly one text value, local file path, or URL to the team wiki.
An explicit resolution_of target remains subject to the cloud writer's evidence and
ACL gates.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| path | No | ||
| text | No | ||
| title | No | ||
| audience | No | ||
| occurred_at | No | ||
| resolution_of | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose one genuine gate: an explicit resolution_of target is subject to the cloud writer's evidence and ACL checks. But it does not describe the write effect beyond 'submit'—whether it creates a new entry, updates existing content, or how rejection/failure surfaces—so the transparency is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core action and payload constraint are front-loaded, and the second sentence earns its place by warning about resolution_of gating. Every sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description resolves the hardest ambiguities: the exactly-one payload rule and the special gated behavior of resolution_of. An output schema exists, so return-value documentation is not required. It does not spell out the three remaining metadata parameters, but their names are conventional and lower-risk, making the tool largely usable as written.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It usefully clarifies that text/path/url form a mutually exclusive payload set and that resolution_of has validation/ACL implications. However, title, audience, and occurred_at are left entirely to name-based inference, leaving a gap in a 7-parameter optional schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a concrete action ('Submit'), a precise payload restriction ('exactly one text value, local file path, or URL'), and a destination ('team wiki'), which clearly separates it from the read/search/delete siblings in the tool list. The second sentence adds a meaningful caveat rather than blurring the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a write/submit context through the verb and destination, and it explicitly states the exactly-one input rule. However, it gives no direct when-to-use guidance or alternatives such as 'use search_brain/read_page for retrieval.' The choice among brain_submit and its siblings is left mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_entityC
Return a bounded, ACL-visible entity dossier with cited relationship evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are present, the description carries the full burden. It adds useful behavioral context by stating the output is bounded, ACL-visible, and includes cited relationship evidence. However, it does not disclose whether the operation is read-only, error semantics, or any permission requirements beyond the ACL mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence of about 10 words. It front-loads the most distinctive attributes and avoids filler, making it efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return shape may be covered elsewhere, but the description does not explain the required input parameter at all. With no usage guidance and zero schema description coverage, an agent lacks enough information to construct a correct call confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single required 'entity' parameter. It does not explain what form the entity value should take (ID, name, slug), any validation rules, or examples. The description adds no meaning beyond the parameter name itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Return') and resource ('entity dossier') with distinctive attributes ('bounded, ACL-visible, cited relationship evidence'). It is clear enough to separate from siblings like list_entities or read_page, though it does not explicitly reference alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings such as search_brain, read_page, or list_entities. The description implies it is for a single entity dossier, but no explicit context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entitiesA
List entity identities visible to the current reader.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does convey that the operation is a read-only listing (via 'List') and that results are scoped to the reader's visibility, which is useful. However, it does not disclose potential limitations (e.g., pagination, ordering, whether identities are returned as IDs or full objects, or error behavior). The description is minimally transparent but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence with no filler words or redundant information. It front-loads the action and resource immediately. Every word contributes to understanding the tool's purpose and scope, making it a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and an existing output schema, the description is largely sufficient. It specifies what the tool does and the permission context ('visible to the current reader'). The only notable gap is the absence of usage guidance relative to sibling tools, but this is more of a usage-guidelines concern. Given the simplicity of the tool, the description is adequately complete without needing to detail return structures or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% because the properties object is empty. Per calibration, a baseline of 4 applies when params are absent. The description does not need to explain parameters, and it doesn't introduce any ambiguity about parameter usage. It adds no parameter semantics because there are none to add, leaving the baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (List), the resource (entity identities), and the scope (visible to the current reader). This distinguishes it from siblings like describe_entity, which would provide detailed information about a single entity, and search_brain, which implies a search operation. The verb and object are unambiguous and not tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. While the purpose implies it should be used for enumerating accessible entities, there is no mention of exclusions or scenarios where a sibling tool would be more appropriate. The agent is left to infer usage solely from the tool's name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_pageB
Read one ACL-visible wiki page.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does add useful context with 'ACL-visible,' indicating access-control filtering applies. It does not disclose behaviors like not-found handling or permission requirements, but for a simple read operation this is a reasonable minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler. Every word earns its place, and the core action and resource are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and only one required parameter, the description does not need to explain return values extensively. Still, the lack of path format details and the absence of any sibling guidance leave meaningful gaps for an agent deciding how and when to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the meaning or expected format of the 'path' parameter. The phrase 'wiki page' only weakly suggests that path refers to a page identifier, leaving the agent to infer the actual path semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Read') and the resource ('wiki page'), and the qualifier 'one ACL-visible' narrows it to a single page. It is distinct enough from siblings like search_brain and list_entities, though it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when an agent needs to read a single ACL-visible wiki page, and it hints at a boundary via 'one.' However, it provides no explicit guidance about when not to use it or which sibling tool should be preferred for searching or listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_brainB
Search ACL-visible team knowledge with hybrid ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| filters | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses two useful traits: ACL-scoped visibility and hybrid ranking. However, it does not address result limits, pagination, or other operational details, so transparency is only moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It communicates the action, scope, and a key behavioral trait efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too sparse for a tool with three parameters and no annotations. It omits parameter semantics, filter expectations, and any relationship to sibling tools, so an agent would need to guess at how to construct valid calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only implicitly supports the query parameter via the verb 'Search'. Filters and max_results are not explained, and the description adds no meaning beyond their names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and identifies a distinct resource ('ACL-visible team knowledge'), making the core purpose clear. It does not explicitly name any sibling tool it is not, so it misses the top score for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use search_brain versus siblings such as ask, list_entities, or describe_entity. There is no exclusions or alternatives, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.10.0- First observed
ask - First observed
brain_delete - First observed
brain_submissions - First observed
brain_submit - First observed
describe_entity - First observed
list_entities - First observed
read_page - First observed
search_brain
TDQS
Scored across 8 tools
Most tools target clearly distinct actions: searching, reading pages, listing/describing entities, submitting, tracking submissions, and deleting. The main ambiguity is between search_brain and ask, since both query team knowledge and return cited results, though one is search-oriented and the other is answer-oriented.
The set mostly uses readable snake_case verbs like read_page, list_entities, and describe_entity, but also includes bare 'ask' and the reverse-prefixed brain_submit, brain_submissions, and brain_delete. This creates a mixed convention that is still understandable but not fully consistent.
Eight tools is well-scoped for a team knowledge/wiki server. Each tool maps to a meaningful operation without redundancy or bloat.
The set covers searching, reading, entity discovery, questioning, submitting content, tracking submissions, and deleting content—a solid lifecycle for this domain. Minor gaps exist, such as no explicit page/entity update tool or detailed submission inspection beyond status listing.
Maintenance
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
An MCP server that gives your AI access to the source code and docs of all public github repos
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseAqualityAmaintenanceA self-hosted MCP server that gives AI agents shared, long-term memory over a git-backed folder of markdown, enabling persistent knowledge search, read, and write without a database.1626 npm11MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that gives AI coding agents a git-backed markdown wiki to read and update, enabling search, read, write, verify, ingest, promote, and lint operations on versioned knowledge documents with schema validation, staleness tracking, and contradiction detection.4MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables verified agents to retrieve from, propose changes to, and share capabilities around a human-owned Markdown/Git knowledge base, ensuring curation, exact-byte approval, and Git-based promotion.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that enables AI agents to search, fetch, and analyze a self-maintaining markdown knowledge base with provenance, drift detection, and canonical definitions.2MIT