Skip to main content
Glama

mcp-context-card

npm CI license: MIT mcp-context-card MCP server

Get one. Or add it to yours. The essential MCP server for a project's context, memory, and identity — discoverable to any MCP client, and rendered as one card you can read.

Light

Dark

the context card, light theme

the context card, dark theme

context — the project's AGENTS.md, served whole or one section at a time.

the card's context section — AGENTS.md, section nav, read_agents_md

memory — facts that persist across sessions, in a file.

the card's memory section — a real, tagged, verified fact

identity — what this server is, from its own Server Card.

the card's identity — name and pills

Discovery goes through two surfaces already in the ecosystem: the Server Card _meta block and ai-catalog.json sibling entries.

Pick one

You want to…

Add an AGENTS.md — you don't have one

author_agents_md drafts one from your repo's real facts

Improve an AGENTS.md — you have one, make it the best it can be

the same tool, automatically — drop in a project.faf and it upgrades to BEST: goal, who it's for, why

Get a new MCP server base — context, memory, identity, wired

stand this up as-is; a host has all three before you write a tool of your own

Improve your MCP with context, memory, ID — you already run one

run it alongside your existing server; nothing to migrate, it composes

Related MCP server: terminal-mcp

A base MCP — or an extension for any other

Context, memory, and identity are essential — every MCP host needs an agent that knows a project's instructions, remembers facts across sessions, and can say what it is. mcp-context-card is those three, done once:

  • Stand it up as your base MCP. Point a host at it and an agent already has AGENTS.md served section‑by‑section, remember / recall / forget memory that survives a restart, and a whoami identity — before a single tool of your own is written.

  • Or extend any existing MCP with it. Run it alongside a server you already have — filesystem, git, a database, your own — and that agent gains context, memory, and identity discovery it didn't have. Nothing to migrate; it composes.

Nine tools, two discovery surfaces already in the ecosystem (Server Card _meta, ai-catalog.json), and a rendered card. MIT, on npm.

It composes:

  • serve · discover · render — this server

  • author BETTER, keep trueagents-md-facts (author_agents_md wraps it for the facts layer; adds a BEST layer of its own from project.faf when one exists)

  • files · shell · gitserver-filesystem, server-git / github‑mcp‑server, your test runner's MCP

Vendor-free — context is plain Markdown (AGENTS.md); the memory and identity formats are swappable examples. It reads and writes only its own three files (AGENTS.md, project.fafm, .well-known/fafa) — no general file access, no shell, no search.

The card

The screenshot at the top of this page is exactly this — the same three sources rendered as one self‑contained HTML page: identity, AGENTS.md, memory, and how a machine fetches it. The view for people: read it, screenshot it, drop it in a PR, put it on a status page.

AGENTS.md sections are collapsed by default, so the card scans in one screen; a sticky index jumps to any section, Expand all opens everything. Sections toggle natively — the one small inline script only adds the bulk button and the print handler. --expanded / ?expand=all renders it fully open, script-free, for a screenshot.

npx mcp-context-card card            # at a terminal: writes context-card.html and opens it
npx mcp-context-card card --expanded # every section open
npx mcp-context-card card > x.html   # piped/redirected: raw HTML to stdout
GET /card                            # live, on the HTTP transport
GET /card?expand=all&theme=light&accent=%230066cc

Light, dark, or auto; the accent defaults to the AAIF palette and takes any hex. This repo's own card, live: auto · light · dark (all in the AAIF accent shown here — pass any hex to change it).

Add it to your setup

No AGENTS.md yet?

The author_agents_md tool authors one — BETTER from your repo's real facts (build/test commands, entry points, toolchain conventions, via agents-md-facts), or BEST when a project.faf exists: the same facts, plus its structured goal, who it's for, and why, as a section ahead of them. Nothing to configure — the tier follows what's actually there. (The ladder this follows.)

To author or keep the facts layer true outside a session:

npx agents-md-facts          # author / refresh AGENTS.md
npx agents-md-facts --check  # fail if missing or stale (CI, pre-commit)

See the card

One command, no host, no config — from your project directory:

npx mcp-context-card card

At a terminal it writes context-card.html and opens it in your browser. Piped or redirected (> card.html, a script, CI) it writes raw HTML to stdout instead; --stdout forces that from a terminal too. --expanded opens every section.

Wire it into a host

Claude Desktop, Cursor, or any stdio host:

{
  "mcpServers": {
    "context-card": {
      "command": "npx",
      "args": ["-y", "mcp-context-card"],
      "env": { "MCP_CONTEXT_CARD_ROOT": "/abs/path/to/your/project" }
    }
  }
}

MCP_CONTEXT_CARD_ROOT points at the directory with your AGENTS.md. The memory tools work with or without it; identity is optional. Over HTTP instead: PORT=8080 npx mcp-context-card. Requires Node ≥20.

If command: "npx" fails to spawn (spawn npx ENOENT — seen on Cursor, whose host process doesn't inherit a shell PATH), point command at node and the installed dist/bin.js instead — see docs/WIRING.md. Transport choice is in docs/TRANSPORT.md.

Extending an MCP you already run: most hosts accept more than one mcpServers entry — add context-card alongside server-filesystem, server-git, or your own, and every agent in that host gains context, memory, and identity discovery without anything else changing.

Why

AGENTS.md is the de-facto standard for telling a coding agent how to work in a repo. But a client has to know the file exists and read the whole thing into context. There is no standard way for a server to say "here is my AGENTS.md, here is what I remember, here is who I am" — so every server that wants this grows its own shape.

mcp-context-card answers all three through mechanisms that already exist:

  1. Server Card _meta (SEP‑2127) — one reverse‑DNS‑namespaced key per concern, readable in‑band as an MCP resource and at GET /.well-known/mcp/server-card.

  2. ai-catalog.json — sibling entries keyed by media type, at GET /.well-known/ai-catalog.json.

The context concern points at AGENTS.md (text/markdown). Memory and identity have no de‑facto standard yet, so the examples here use .fafm and .fafa — one instantiation each, swap in your own.

The wire‑level detail is in docs/MECHANISMS.md.

Tools

Tool

What it's for

author_agents_md

draft an AGENTS.md — BETTER from the repo's facts (via agents-md-facts), BEST when a project.faf exists — ready to drop in

read_agents_md

return the project's AGENTS.md — whole, or one section by heading

list_agents_md_sections

the headings, so a client pulls one section instead of the whole file

remember

write a fact that will still be there next session

recall

read a fact stored in a previous session

forget

drop or correct a stale fact

whoami

this server's name, vendor, version, status, license

list_context_sources

what this project publishes, in what media types, via which surface

render_context_card

the whole card as one self‑contained HTML page (also GET /card)

The demo

npm run demo runs every tool over both transports:

  1. Context — list the AGENTS.md sections, then pull just ## Test.

  2. Memoryremember() a fact, stop the server process, start a new one, recall() the same fact. Only the file carries it across.

  3. Identitywhoami(), and the Server Card _meta block read back from a live client.

  4. Discoverylist_context_sources(), then the same server over stateless HTTP with its .well-known routes and GET /card.

104 tests on Linux, macOS, and Windows, coverage‑gated in CI. Two spawn a real child process and check a remembered fact survives the restart — one against an existing project.fafm, one starting from a project that has never had one; another checks the stdio and HTTP tool surfaces match.

Layout

Path

What

src/server.ts

the nine tools + the Server Card resource

src/agents-md.ts

reads and section‑splits AGENTS.md

src/author.ts

author_agents_md — BETTER via agents-md-facts, BEST when project.faf exists

src/md.ts

a minimal dependency‑free Markdown → HTML renderer

src/render-card.ts

the card — identity + AGENTS.md + memory + discovery, as one HTML page

src/memory.ts

file‑backed remember / recall / forget

src/identity.ts

whoami (.fafapackage.json fallback) + the _meta block

src/catalog-gen.ts

writes ai-catalog.json from the same three sources

src/transport/http.ts

the stateless Streamable HTTP app (Hono)

src/bin.ts

the entry point — stdio · --http · card · --help · --version

License

MIT.

This repo dogfoods what it serves — its AGENTS.md is a real, current file, and it ships a project.faf as the structured source behind it.

Available Tools

9 tools
author_agents_mdA

Author an AGENTS.md for this project and return the draft — BETTER from repo facts alone (via agents-md-facts: real build/test commands, entry points, toolchain conventions, nothing invented), or BEST when a project.faf exists (facts plus its structured goal/who/why as a second managed block ahead of them). Does not write a file.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does this well: it explicitly states the tool returns a draft, does not write a file, relies only on repo facts or project.faf content, and 'nothing invented.' This gives the agent a reliable model of side effects and output trustworthiness.

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 two sentences with the core purpose front-loaded. Every clause adds necessary information: source of facts, quality tiers, and the non-write side effect. It avoids repetition of schema or annotation details, so there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is complete: it explains what the output is (a draft), what data feeds it, when the result is better or best, and that it does not modify the filesystem. An agent can decide whether and how to invoke this tool without ambiguity.

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 input schema has zero parameters and 100% coverage, so there are no parameter semantics to clarify. The description still adds relevant semantic context by distinguishing the BETTER and BEST input states based on whether a project.faf exists, which helps the agent understand what determines output quality.

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 opens with a specific verb and resource: 'Author an AGENTS.md for this project and return the draft.' It also clearly isolates this tool from its siblings by framing it as draft generation rather than reading or listing existing AGENTS.md content, and it emphasizes that no file is written.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance on when output is BETTER versus BEST, specifically depending on whether a project.faf exists. It does not explicitly name sibling alternatives such as read_agents_md, but the purpose and the non-write guarantee make the intended usage clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forgetA

Remove a fact by id — to correct or drop something stale. A missing id is reported, not an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe exact id of the fact to remove. Reports whether a fact was actually removed.

TDQS

A4/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. It discloses one useful behavior: 'A missing id is reported, not an error', and mentions it reports whether removal occurred. However, it doesn't address permanence, side effects, or error output format for a destructive operation.

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 brief, information-dense sentences. The core action and purpose are front-loaded, and every word contributes value.

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 simple one-parameter tool, the description plus schema cover core use, error behavior, and removal reporting. No output schema exists, but the 'reports whether' statement gives sufficient guidance. A bit more on side effects or return format would improve completeness, but it's nearly sufficient.

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 100%, so the baseline is 3. The description only restates 'by id' and the schema already documents the 'reports whether a fact was actually removed' behavior, adding no new parameter-level meaning.

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 states a specific verb and resource: 'Remove a fact by id'. It also adds context on why ('to correct or drop something stale'), and the sibling set (remember, recall) makes the distinct purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context with 'to correct or drop something stale', implying when to use this tool. It doesn't explicitly list alternatives or when-not-to-use scenarios, but the intention is fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agents_md_sectionsA

List the headings in this project's AGENTS.md, so a client can pull one section instead of spending context on the whole file.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.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 output is a list of headings and frames the tool as context-saving, but it does not explicitly state that the operation is read-only, has no side effects, or how it behaves if AGENTS.md is missing. For a simple list operation, these are minor gaps but still present.

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 entire description is one concise sentence of about 24 words. The action is front-loaded ('List the headings'), and the rationale provides useful context without any filler.

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 zero-parameter listing tool, the description covers the action, the target, and the reason to use it. It does not specify the exact return format (e.g., plain list vs markdown), but since no output schema exists, a bit more detail about the response shape would improve completeness.

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?

There are zero parameters, so the baseline is 4 per rubric. The description adds meaning by saying 'this project's AGENTS.md', indicating the target is fixed to the current project and no path or filter argument is required.

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 states a specific verb ('List') and a specific resource ('the headings in this project's AGENTS.md'), and explains the purpose ('so a client can pull one section instead of spending context on the whole file'). It clearly distinguishes this tool from siblings like read_agents_md, which reads the full file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: when a client wants to retrieve only the section headers rather than the full document. The phrase 'instead of spending context on the whole file' contrasts with reading the entire file, effectively pointing at read_agents_md as the alternative, but it does not name alternatives or state explicit when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_context_sourcesA

What context does this project publish (AGENTS.md, memory, identity), in what media types, and through which discovery surface. For a client connecting cold.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It discloses the kind of data returned (context sources, media types, discovery surface) and 'list' implies a read-only operation. However, it doesn't explicitly state there are no side effects or mention edge cases like empty results.

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 two concise sentences that front-load the core function and then add the usage context. Every word earns its place; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema and no annotations, the description fully captures what the agent needs: what the tool does, what it returns, and when to use it. Nothing critical is missing.

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, so the baseline is 4. The description doesn't need to elaborate on inputs, and it doesn't omit anything relevant.

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 tool lists which context sources (AGENTS.md, memory, identity) are published, their media types, and the discovery surface. This is specific and distinct from sibling tools like read_agents_md or list_agents_md_sections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage scenario: 'For a client connecting cold.' This tells an agent when to use the tool. It doesn't explicitly mention alternatives or when not to use it, but the scoped purpose makes it obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_agents_mdA

Return this project's AGENTS.md — the whole file, or one section by heading. The instructions a client would otherwise have to know to look for and read wholesale.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoA heading to return just that section (case-insensitive, prefix match). Omit for the whole file.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. 'Return' implies a read operation and the whole-file-or-section scope is clear, but the description does not explicitly state it has no side effects, how missing sections behave, or any return-format details. It is adequate but not rich.

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 first sentence is concise, front-loaded, and behaviorally precise. The second sentence is somewhat non-essential and motivational, but it is short and helps position the tool's purpose without bloating the description.

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 simple one-parameter read tool with full schema coverage, the description is nearly complete: it states what is returned and the available modes. The main gap is not explicitly disambiguating from list_agents_md_sections, though the verb 'Return' and 'section by heading' make the distinction reasonably clear.

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 100%, so the baseline is 3; the schema already documents the section parameter and the omit-for-whole-file behavior. The description adds only a slight contextual restatement ('or one section by heading'), providing no meaning beyond the 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 description states a specific verb and resource: 'Return this project's AGENTS.md', and explicitly defines the two modes: whole file or one section by heading. This clearly differentiates it from sibling tools like author_agents_md (write) and list_agents_md_sections (list headings).

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 phrase 'The instructions a client would otherwise have to know to look for and read wholesale' implies this is the entry point for pulling project instructions, but it never explicitly says when to prefer this over list_agents_md_sections or when not to use it. Usage context is implied, not stated with exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recallA

Retrieve a fact stored in a previous session by id. Exact lookup — not fuzzy or substring.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe exact id a previous remember call used. Returns the stored text, or a "no memory for <id>" message if nothing matches.

TDQS

A4/5.0
Behavior4/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. 'Retrieve' conveys a read-only action, 'exact lookup' clarifies matching semantics, and the schema property description discloses the not-found response. This is adequate transparency for a simple lookup tool.

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 short sentences with no wasted words. The action and resource are front-loaded, and the precision qualifier is presented immediately after the main purpose.

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 one-parameter lookup tool, the description plus schema property cover the operation, id semantics, and missing-id outcome. It could be more explicit about when to prefer this over sibling tools, but nothing essential is missing for a correct invocation.

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 coverage is 100% and the id property already explains that it is the exact id from a previous remember call and what value will be returned. The description's 'exact lookup — not fuzzy or substring' reinforces behavior but adds little new parameter-level meaning.

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 ('Retrieve') and resource ('a fact stored in a previous session by id'), and the exact-lookup qualifier distinguishes it from fuzzy search behavior. It clearly positions this as the retrieval counterpart to remember.

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 is for looking up a previously stored fact by exact id, but it does not explicitly say 'use this when you have an id from remember' or name an alternative for fuzzy/substring needs. The 'not fuzzy or substring' hint provides context but not concrete when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rememberA

Persist a fact past the session boundary — written to a .fafm file, not held in memory. Reusing an existing id replaces that fact's text in place (no duplicate); a new id appends. Facts are written verification_status: unverified.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesA stable key you choose for this fact — pass the same id later to recall or forget it. Exact match, case-sensitive, any string; keep it short and meaningful (e.g. "deploy-target", "db-url"). Reusing an id updates that fact rather than adding a second one.
textYesThe fact itself, as plain prose. Stored verbatim and returned as-is by recall.

TDQS

A4.2/5.0
Behavior4/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 facts go to a .fafm file rather than memory, that reusing an id replaces text in place, and that new ids append. It also exposes the written verification_status. It does not describe return or failure behavior, but the core side effects are clearly stated.

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 tight sentences with the core purpose front-loaded. Every clause adds a distinct behavioral fact, and there is no filler or repetition.

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 simple two-parameter write tool with no output schema, the description covers persistence location, update/replace semantics, append behavior, and written status. The main gaps are the lack of a return-value/confirmation description and explicit failure modes, but these are minor at this complexity.

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 100%, and both id and text are already well-documented in the schema. The description mostly restates the id replacement semantics found in the schema, adding little parameter-level meaning beyond it.

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?

States the exact operation: persistently storing a fact past the session boundary, with explicit update-vs-append semantics. This clearly distinguishes it from read-oriented siblings like recall and read_agents_md.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to use it: any fact that must survive the session or be updated by id. It does not explicitly contrast with recall/forget or state when not to use it, but the durable-write context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_context_cardA

Render the whole card — identity, AGENTS.md, memory, discovery — as one self-contained HTML page a person can read or screenshot. AGENTS.md sections collapse by default; pass expanded:true for the full render. Also served at GET /card (?expand=all) over the HTTP transport.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNodefault: auto
accentNoCSS hex colour, e.g. #FF702D (default: the AAIF palette)
expandedNorender every AGENTS.md section open (default: collapsed)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the burden. It discloses default collapsing behavior, the expanded parameter, and the HTTP alternative. It doesn't explicitly state read-only or side-effect-free, but 'render' implies no mutation.

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, front-loaded with the main purpose, then additional details. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All necessary information for invoking the tool is present: action, parameters, defaults, and alternative access method. Output format is succinctly described as an HTML page.

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 description adds meaning for 'expanded' by explaining the default collapse and the expanded:true toggle. The HTTP query parameter ?expand=all is also noted. Theme and accent are already well-documented in the 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 description clearly states the tool renders the whole card as an HTML page for reading or screenshotting, listing the exact components (identity, AGENTS.md, memory, discovery). This distinguishes it from sibling tools that recall, forget, or edit individual memory sections.

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 use for human-facing presentation but doesn't explicitly contrast with alternatives like read_agents_md or whoami. It does mention the HTTP endpoint, but lacks a clear 'when to use vs. not use' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA

This server's own identity — name, vendor, version, status, license — from its .fafa card.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It discloses the source (.fafa card), the kind of data returned (identity fields), and implies a read-only introspection behavior. It could be more explicit about side effects or non-mutability, but for a simple identity query the disclosure is adequate.

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 well-structured sentence that leads with the core purpose and then enumerates the specific fields returned. Every word contributes meaning, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema introspection tool, the description is complete: it names the identity source and lists the relevant fields an agent can expect. There are no hidden inputs, and the output scope is sufficiently specified.

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 accepts zero parameters, so there are no parameter semantics to document. The empty input schema is fully self-explanatory, and the description does not need to compensate for any schema gaps.

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 identifies what the tool returns: this server's own identity, explicitly listing name, vendor, version, status, and license from its .fafa card. This firmly distinguishes it from sibling tools that focus on agent markdown files, memory, and context sources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this tool is for retrieving server identity information, which is a distinct and self-contained purpose. It does not explicitly state when not to use it, but the contrast with sibling tools is strong enough that an agent can infer the appropriate context for invocation.

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. 1 tool updatev1.1.0
    • Changedrender_context_card1 field changed
      • addedInput schema / properties / expanded
        Added value: +{
        +  "description": "render every AGENTS.md section open (default: collapsed)",
        +  "type": "boolean"
        +}
  2. 3 tool updatesv0.6.2
    • Changedforget1 field changed
      • addedInput schema / properties / id / description
        Added value: +"The exact id of the fact to remove. Reports whether a fact was actually removed."
    • Changedrecall1 field changed
      • addedInput schema / properties / id / description
        Added value: +"The exact id a previous remember call used. Returns the stored text, or a \"no memory for <id>\" message if nothing matches."
    • Changedremember2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"A stable key you choose for this fact — pass the same id later to recall or forget it. Exact match, case-sensitive, any string; keep it short and meaningful (e.g. \"deploy-target\", \"db-url\"). Reusing an id updates that fact rather than adding a second one."
      • addedInput schema / properties / text / description
        Added value: +"The fact itself, as plain prose. Stored verbatim and returned as-is by recall."
  3. 9 tool updatesv0.5.1
    • First observedauthor_agents_md
    • First observedforget
    • First observedlist_agents_md_sections
    • First observedlist_context_sources
    • First observedread_agents_md
    • First observedrecall
    • First observedremember
    • First observedrender_context_card
    • First observedwhoami

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

Most tools are clearly separated by domain: fact memory, AGENTS.md, and context discovery/identity. A few pairs like recall vs read_agents_md and list_agents_md_sections vs list_context_sources could be momentarily confused, but their descriptions clarify distinct scopes.

Naming Consistency4/5

Names are all lowercase snake_case and mostly follow a verb-object pattern, which is readable and predictable. The memory verbs remember/recall/forget drop the object, and whoami is a special case, creating minor but not confusing inconsistencies.

Tool Count5/5

Nine tools is an appropriate size for this server's scope, covering fact memory, AGENTS.md operations, and context discovery without redundant helpers or bloat. Each tool earns its place.

Completeness4/5

The set covers the main workflows: fact create/read/delete, AGENTS.md read/section listing/drafting, and context discovery/identity. It lacks direct fact enumeration and a way to persist authored AGENTS.md, but render_context_card can surface memory and file writing may be intentionally outside the server's scope.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An agent-capable MCP server with terminal access, filesystem control, and persistent memory. It includes sandboxing, access control, activity logging, and a file-backed memory store for context across conversations.
    MIT