Skip to main content
Glama

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 :brain: reaction in Slack, the master through the backoffice.

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 ask with citations verified by code.

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

  1. Capture. Thin adapters authenticate and acquire bytes. Local files and private Google Drive documents stay on your machine until uploaded through a presigned URL.

  2. Queue. Every adapter produces the same kind-free CaptureEnvelope. The Postgres queue is durable, leased, and idempotent per actor and client key.

  3. 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.

  4. Remember. The knowledge repository is plain Git and Markdown. Postgres is operational state and a rebuildable index, never a second wiki.

  5. Read. Five MCP tools for agents, @brain for 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

wiki/notes/

yes

contextual conclusion, decision, or event

Concept

wiki/concepts/

yes

durable explanatory knowledge

Entity identity

wiki/entities/ent_<uuid>.md

entity primitives only

opaque ID and scoped name claims

Source

sources/YYYY/MM/<capture-id>.md

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 = true

You say

What happens

"Save the conclusions to the brain."

brain_submit(text=…) with a self-contained synthesis.

"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?"

ask retrieves within your visibility and answers with verified citations.

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

search_brain(query, filters?, max_results?)

hybrid lexical + vector search

read_page(path)

one visible page with links and citations

ask(question)

a cited, verified answer — or an honest refusal

list_entities()

identities with a name you may see

describe_entity(entity)

bounded evidence-rich dossier composed from visible pages

brain_submit(text | path | url, title?, occurred_at?, audience?, resolution_of?)

capture one input; the optional contradiction ID is master-only

brain_submissions(limit?, status?)

capture progress

brain_delete(paths, why)

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's acl is null or a list of groups. brain-admins is 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

deepseek/deepseek-v4.1-flash

cited answers

z-ai/glm-5.2

embeddings

qwen/qwen3-embedding-8b, 2560 dimensions

OCR

qwen/qwen3-vl-8b-instruct

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 gates

Quick 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 lint

Index 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 fake

Deployment

One image, three Fly process groups:

Process

Command

Role

app

stigmergy-server --transport http

MCP over HTTP, uploads, index webhook, backoffice

worker

stigmergy-librarian-boot

the only writer and the scheduled gardener

slack

stigmergy-slack

Socket Mode adapter, one active instance

make deploy-staging
make rebuild-staging

Area

Variables

Models

OPENROUTER_API_KEY, STIGMERGY_LIBRARIAN_MODEL, ANSWER_MODEL, STIGMERGY_OCR_MODEL

Database

STIGMERGY_INDEX_DSN

Evidence store

STIGMERGY_EVIDENCE_ENDPOINT, _BUCKET, _ACCESS_KEY_ID, _SECRET_ACCESS_KEY

Server

STIGMERGY_PUBLIC_HOST, STIGMERGY_TOKEN_STORE or STIGMERGY_TOKEN_STORE_FILE

Backoffice

STIGMERGY_ADMIN_TOKEN_HASH, STIGMERGY_ADMIN_ACTOR

Writer

STIGMERGY_REPO, STIGMERGY_LIBRARIAN_REPO_URL, STIGMERGY_LIBRARIAN_APP_ID, _INSTALLATION_ID, _PRIVATE_KEY, STIGMERGY_LIBRARIAN_GARDEN_AT

Index webhook

STIGMERGY_GITHUB_WEBHOOK_SECRET, STIGMERGY_GITHUB_REPO, STIGMERGY_GITHUB_BRANCH

Slack

SLACK_APP_TOKEN, SLACK_BOT_TOKEN, SLACK_TEAM_ID

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 rebuild

Only the writer's GitHub App identity commits to wiki/, sources/, and the registry. Runbook: docs/OPERATIONS.md; reset: docs/RESET.md.

Repository layout

Package

kernel

ACL flow, deadlines, the model boundary, normalization

capture

envelopes, evidence, uploads, extraction and OCR, queue, sources

bridge

the local stdio MCP client

knowledge

page contracts, FilingPlan, writer, linter, repair, contradictions, write guard

entities

opaque identities, claims, registry, merge, rename, delete

changes

exact patches and the change ledger

index

corpus selection, ranking, incremental updates, full rebuild, health

server · answer

MCP tools, HTTP transport, webhook, verified answers

slack

Socket Mode adapter

admin

the master backoffice

librarian

the writer process, bootstrap, Git and GitHub App transport, schedule

ops

the guarded non-production reset

Design principles

  1. Git and Markdown are current knowledge; Postgres is a rebuildable index.

  2. Every adapter produces the same kind-free CaptureEnvelope.

  3. Original bytes and source pages are immutable except through explicit deletion.

  4. One serialized writer: one commit and one change record per operation.

  5. Visibility is a write constraint.

  6. The librarian owns notes and concepts; each source can produce zero or more reusable, connected ideas, while entity pages hold identity only.

  7. No write waits for a human. Uncertainty is represented honestly.

  8. A health finding is preventable or autonomously repairable, or it is not a finding.

  9. 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 tools
askB

Answer from ACL-visible team knowledge with citations.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
whyYes
pathsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
pathNo
textNo
titleNo
audienceNo
occurred_atNo
resolution_ofNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
filtersNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 8 tool updatesv0.10.0
    • First observedask
    • First observedbrain_delete
    • First observedbrain_submissions
    • First observedbrain_submit
    • First observeddescribe_entity
    • First observedlist_entities
    • First observedread_page
    • First observedsearch_brain

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

Eight tools is well-scoped for a team knowledge/wiki server. Each tool maps to a meaningful operation without redundancy or bloat.

Completeness4/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A 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.
    16
    26 npm
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP 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.
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An 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