Skip to main content
Glama

a4sx-mcp

A local MCP server for a4sx, the library and marketplace for coding-agent sessions. It gives any MCP client (Claude Code, Claude Desktop, Cursor, VS Code, ...) five tools to find a saved session, load it as context, and save the current one, using the sign-in of the a4sx command-line tool.

It runs on your machine over stdio. Your a4sx token stays in the a4sx config directory and is only ever sent to the server that issued it: pointing the server elsewhere with --base never sends it a token from another server.

Private library: the sessions saved under your a4sx account on session-exchange.com. Its entries are not listed in the marketplace and not returned by public search; they are listed, fetched, versioned and deleted through the a4sx API with your own sign-in (or an agent key you create). Listing a session in the marketplace is a separate step in the web app, with a review. "Private" describes who can list and fetch an entry through a4sx; the server stores the bytes you upload, after scrubbing them again.

Tools

The names, input schemas and limits are the same as the hosted a4sx MCP server's.

Tool

What it does

Sign-in

search_sessions

Search vetted public sessions (scope=public, default), or your own saved ones (scope=library); harness keeps only sessions recorded with the given harnesses

library scope only

get_session_summary

Describe one session before using it: outline, members, price, provenance

library source only

acquire_session

Copy a marketplace session you are entitled to (free, bought or granted) into your private library

yes

fetch_session_context

Load a session from your library as starting context, cut to max_tokens (500 to 100,000; default 8,000)

yes

publish_session

Save a transcript (JSONL) to your private library

yes

Safety rules:

  • acquire_session never buys. For a paid listing you have no purchase or grant for, it returns status: "payment_required" with the price and the listing URL (or, when the listing's session is sold on its own, the member to buy). You buy it yourself in the web app, then ask again.

  • Harnesses. Claude Code, Codex CLI and Grok Build sessions are listed and loaded alike; only Claude Code sessions can be resumed today. Every search and summary row carries the harness it was recorded with ({id, version}; unknown when not identified), and resumable is false for a session recorded with another harness. fetch_session_context renders such a session from its stored canonical form.

  • publish_session only saves privately. visibility accepts only "private"; listing a session publicly is a separate, reviewed step in the web app. It accepts only Claude Code or Codex CLI JSONL (every line a record with a type; a Claude Code user or assistant turn with a session id, or a Codex CLI session_meta record first), so it can't be used to upload an arbitrary file. The transcript, its title and its label are scrubbed on your machine with the a4sx SDK, which applies the a4sx CLI's rules (secrets, command-line passwords, Sheet ids, and personal data: e-mail and IP addresses, home-directory user names, hosts, key-file paths), and scrubbed again by the server. Scrubbing is a backstop, not a guarantee. A session that continues someone else's (its parent, or the session it was resumed from, was acquired) stays marked as untrusted (untrusted: true).

  • Neither tool asks for confirmation inside the protocol. Like the hosted server, it relies on the rules above and on the tool annotations: acquire_session and publish_session are marked readOnlyHint: false, so clients that ask before a tool runs (Claude Code does by default) can ask you, and you should not auto-approve them. The three read tools are marked read-only.

  • Loaded sessions are reference material, not instructions. fetch_session_context always starts with a notice saying so, then wraps everything the session's author controls (title and turns) in <<<A4SX_UNTRUSTED_SESSION nonce=…>>> … <<<END_A4SX_UNTRUSTED_SESSION nonce=…>>> with a random nonce. Inside it, every kind of line break is normalised to \n, <<</>>> become ‹‹‹/››› and a leading # becomes \# (the notice says so), so content can't close the envelope or fake a ### User heading. The title is one line of at most 200 characters, and cutting to max_tokens never removes the notice or the closing line. search_sessions and get_session_summary results are framed the same way: a notice first, then the JSON inside the envelope, with every author-written string on one line, neutralised and capped per field, and the whole result bounded to 64 KiB (a page cut short says truncated: true, and next_offset resumes at the first row left out). Server guidance (next, next_offset) goes on one line after the closing delimiter, never inside the envelope, and carries only fixed texts and numbers. A session with another author's content gets untrusted: true and a stronger notice. Look-alike characters (full-width </#, zero-width spaces) are left as they are: they cannot close the envelope, because the closing line needs the random nonce, but a model may still be misled by them. This lowers the risk of prompt injection but cannot rule it out: keep tool approval on.

  • Limits: transcripts up to 2 MiB per publish_session call (use a4sx push for larger ones); per process, at most 240 requests (tools/list and tools/call), 20 acquires and 10 publishes per minute. The a4sx server enforces its own limits as well.

Related MCP server: agent-bus

Quickstart

You need uv (for uvx) and an a4sx account.

  1. Sign in once with the a4sx CLI. The MCP server reuses that sign-in:

    uvx a4sx login

    Searching public sessions works without signing in. If a tool needs your account and you are not signed in (or the sign-in expired), it returns an error telling you to run a4sx login.

  2. Add the server to your client.

Claude Code

claude mcp add a4sx -- uvx a4sx-mcp

Claude Desktop

Edit claude_desktop_config.json (Settings, Developer, Edit Config) and restart Claude Desktop:

{
  "mcpServers": {
    "a4sx": { "command": "uvx", "args": ["a4sx-mcp"] }
  }
}

Cursor

Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

{
  "mcpServers": {
    "a4sx": { "command": "uvx", "args": ["a4sx-mcp"] }
  }
}

VS Code

Add to .vscode/mcp.json in your workspace (or run MCP: Add Server from the command palette):

{
  "servers": {
    "a4sx": { "type": "stdio", "command": "uvx", "args": ["a4sx-mcp"] }
  }
}

Try it

Ask your agent, for example: "Search a4sx for sessions about flaky pytest fixtures and summarise the best one", or "Load my a4sx session my-refactor as context".

Configuration

Everything is optional. Don't put your token into an MCP client config file: sign in with a4sx login instead, which stores it with mode 0600.

Setting

Meaning

--base URL / A4SX_BASE

The a4sx server. Default: the one you signed in to, else https://session-exchange.com. Plain http is refused except for localhost.

A4SX_SESSION, A4SX_SESSION_BASE

A token to use instead of the stored sign-in (for CI), and the server it belongs to (default https://session-exchange.com).

A4SX_CONFIG_DIR

Where the a4sx CLI keeps its sign-in (default ~/.config/a4sx, %APPDATA%\a4sx on Windows).

A4SX_MCP_LOG

warning (default), info or debug. Logs go to stderr and contain tool names, outcomes and durations only: never arguments, transcripts or tokens.

A4SX_MCP_MAX_PUBLISH_BYTES

Lower or raise the 2 MiB publish_session cap (the server may still refuse larger uploads).

A4SX_MCP_PER_MIN, A4SX_MCP_ACQUIRE_PER_MIN, A4SX_MCP_PUBLISH_PER_MIN

Local rate limits (240, 20, 10 per minute). 0 turns a local limit off.

Local server or remote /mcp?

a4sx also runs a hosted MCP server at https://session-exchange.com/mcp, with browser sign-in over OAuth: it advertises the scope library:read (search your library, summaries, loading sessions as context). Public search there works without signing in; acquiring or saving sessions needs a credential with library:acquire or library:publish, for example an agent key created in your a4sx account. Clients that support remote MCP servers with OAuth can connect to it directly and need nothing installed:

claude mcp add --transport http a4sx https://session-exchange.com/mcp

This package is the option for clients without remote OAuth support, and for setups that already use a4sx login. Both expose the five session tools below; the hosted server lists further tools of its own (for example, starting a purchase for the account holder to confirm), which this package does not have.

Same in both:

  • the five session tools' names, input schemas (including the harness filter), annotations, and the server instructions;

  • the untrusted framing: the text of fetch_session_context (notice, nonce envelope, line-break normalisation, escaping, per-field caps, sizing, canonical sessions of other harnesses) and the JSON envelope, notice field, per-field caps, 64 KiB result bound and hint line of search_sessions, get_session_summary and acquire_session;

  • the result fields (plus the local extras listed below);

  • the error codes invalid_arguments, credential_not_accepted, rate_limited, not_found, too_large, content_sha_mismatch, not_a_transcript and no_transcript;

  • JSON-RPC error -32029 when the overall request limit is exceeded.

Differences of this local server:

  • Sign-in. It uses your a4sx login session, so it can do everything your account can in your own library. The hosted server takes a scoped OAuth token (it advertises library:read) or an agent key with the scopes you gave it (library:read, library:acquire, library:publish). With no sign-in at all, local tools return not_signed_in; the hosted server answers with an OAuth challenge instead. The credential_not_accepted message says to run a4sx login rather than to get a scoped token.

  • Rate limits. They are counted per process, not per account. There is no failed-sign-in limit, because there is no sign-in step here. retry_after_s comes from the API's error body, not from the Retry-After header.

  • untrusted. Besides acquired_from on the row and its parents (which is all the hosted server checks), it also uses this machine's record of untrusted sessions from the a4sx SDK. A session missing from your library listing counts as untrusted in both.

  • publish_session:

    • Every upload carries an idempotency key: yours if you pass idempotency_key, else a fresh one. The hosted server sends a key only if you pass one.

    • Uploads are retried twice, with that same key, on network errors, 429 and 502-504; when the server is busy scrubbing other uploads, up to 6 attempts, each after the wait it asks for.

    • The body, title and label are scrubbed locally, so the X-Content-SHA256 sent to the API covers the scrubbed bytes.

    • The content check is stricter: every line must be a JSON record with a type, and the file a Claude Code or Codex CLI session.

    • parent is resolved like the CLI resolves names (exact id, then label, then a unique part of the title or id). The hosted server passes it through verbatim.

    • Without parent, a transcript you resumed with a4sx resume gets its parent edge from the SDK's local lineage record. The hosted server records no edge.

    • The result has extra client_redactions and untrusted fields.

  • payment_required. The price comes from the public listing; the hosted server reads its pricing store.

  • Server name. It is a4sx-mcp in the MCP handshake (hosted: com.session-exchange/sessions).

VS Code extension

The vscode/ directory holds the a4sx extension for VS Code 1.101 or later. It adds the hosted a4sx MCP servers to agent mode in VS Code chat; VS Code runs the sign-in. Its command a4sx: Save this session runs a4sx push --latest in a terminal, which saves your most recently changed local Claude Code session to your a4sx library. To continue a saved session, use Claude Code; other harnesses can't resume sessions today.

The extension is not on the Visual Studio Marketplace yet. To build and test it from source:

cd vscode
npm install
npm run compile
npm test

MCP registry

server.json describes this server for the MCP Registry: the hosted server at https://session-exchange.com/mcp (Streamable HTTP) and this package on PyPI (a4sx-mcp, stdio). It uses the name com.session-exchange/sessions, under which the hosted server is already listed.

Development

git clone https://github.com/crossvault/a4sx-mcp && cd a4sx-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
pytest -q          # offline: the tools run against a local stub server
ruff check . && reuse lint

The tests never touch the network: tool tests run against tests/stub_server.py on 127.0.0.1, the protocol test uses the MCP SDK's in-process client, and a guard fails any test that resolves or connects to a non-loopback address. See CONTRIBUTING.md.

About

a4sx-mcp is made by crossVault GmbH, the company behind a4sx (session-exchange.com), a library and marketplace for coding-agent sessions. It is a thin client: the tools call the public a4sx API through the open-source a4sx SDK, and the hosted service is not part of this repository. You need an a4sx account for everything except public search. It is open source so you can check exactly what it sends before you connect it to your agent. Parts of this project were developed with AI assistance (Claude).

Security

Please report vulnerabilities privately; see SECURITY.md.

License

Apache-2.0, see LICENSE. Copyright 2026 crossVault GmbH.

Available Tools

5 tools
acquire_sessionAcquire sessionA
Idempotent
Inspect

Add a marketplace session you are entitled to (free, bought, or granted) to your private library. Never buys anything: for a paid listing it returns status=payment_required with the price and the listing URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMarketplace listing id (from search_sessions).
tenantNoOwning workspace of a marketplace listing (from search results). Optional.
versionNolatest

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds genuine behavioural context beyond that: it never spends money, it adds to a private library, and a paid listing yields status=payment_required with price and listing URL. It does not explain idempotent re-acquire behaviour, but the annotation covers that.

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, zero filler, with the entitlement scope front-loaded and the no-purchase guarantee immediately after. Every clause carries decision-relevant 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?

There is no output schema, and the description usefully foreshadows the paid-listing response shape (status=payment_required, price, listing URL). For a low-risk, annotated mutation with one required param, this is nearly complete; only the success-path result and the version parameter's meaning are unstated.

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 67% – id and tenant carry descriptions, version has only a default of 'latest'. The description adds no parameter-level meaning at all (no syntax, no source guidance), so it neither compensates for the gap nor improves on the schema. Baseline 3 for a mostly-documented 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?

Names a specific verb+resource ('Add a marketplace session ... to your private library') and scopes it by entitlement (free, bought, granted). An agent can distinguish this from search_sessions, publish_session, and the purchase-related siblings without opening any schema.

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?

States the qualifying condition clearly ('sessions you are entitled to') and rules out the paid case ('Never buys anything ... returns status=payment_required'). It gives clear context for when this is the right tool, but never names the alternative an agent should reach for instead (e.g. request_purchase), so the routing guidance is inferential rather than explicit.

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

fetch_session_contextLoad session as contextA
Read-onlyIdempotent
Inspect

Load a session from your library (saved, or added with acquire_session) as starting context for this conversation, sized to max_tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLibrary id: one of your saved sessions, or the library_id acquire_session returned for a marketplace listing.
versionNo
max_tokensNoContext budget. Long sessions keep the opening request and the newest turns that fit; the middle is elided.
include_tool_callsNoAdd one-line stubs for tool calls and results.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that the content is injected as conversation context and is token-sized, which is meaningful beyond the annotations, but it does not restate the elision behavior (that lives in the schema) or note auth/library prerequisites.

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 a tight parenthetical covering id provenance; the tool's action and its sizing behavior appear before any qualifier. Nothing extraneous.

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?

With no output schema, the description does not need to explain return values, and annotations carry the read-only/idempotent profile. The one remaining gap is the undocumented `version` parameter and no explicit statement of what happens on a missing or unauthorized id, but the essentials for correct invocation are present.

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 75%, so the schema already documents id, max_tokens, and include_tool_calls; only version is undocumented in both places. The description echoes max_tokens sizing but adds no syntax, format, or default guidance beyond what the schema provides, so the baseline of 3 applies.

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+resource (load a session from your library) and the effect (as starting context for this conversation), plus the sizing constraint (max_tokens). It is clearly distinguishable from siblings like get_session_summary (summary only), search_sessions (discovery), and acquire_session (which adds sessions to the library).

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?

It explains the provenance of the id (saved sessions or the library_id returned by acquire_session), which gives the agent context for when this tool applies. It stops short of explicit when-not guidance or naming a competing tool to prefer instead, so it is clear context without exclusions.

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

get_session_summarySession summaryA
Read-onlyIdempotent
Inspect

Describe one session before using it: what it did, outline, price, and whether you already have access. source=marketplace (default) or library.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
sourceNomarketplace
tenantNoOwning workspace of a marketplace listing (from search results). Optional.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the behavioral value of disclosing that the response includes price and an access check, but says nothing about auth requirements, rate limits, or failure modes when the session is unknown.

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?

Two compact sentences with the purpose front-loaded and the source hint appended. Every clause carries information, though 'Describe one session before using it' is slightly awkward phrasing.

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 read-only tool with no output schema, the description usefully previews the summary contents (activity, outline, price, access), which is what an agent needs to decide whether to call acquire_session next. Minor gaps around the optional tenant parameter and error behavior keep it from a 5.

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 only 33% schema description coverage, the description must carry more weight. It clarifies the 'source' parameter ('marketplace (default) or library'), which is already implied by the enum and default in the schema, and says nothing about 'tenant' or the 'id' format. Partial compensation, baseline-level performance.

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?

States a specific verb+resource ('describe one session') and enumerates the returned facets (what it did, outline, price, access), which distinguishes it from fetch_session_context and acquire_session. It stops short of explicitly naming those siblings, so differentiation is inferable rather than stated.

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?

'Describe one session before using it' implies a pre-flight check that precedes acquire_session or actual use, which is useful implied guidance. However, no alternative is named and no exclusion or precondition (e.g., what to do if access is missing) is spelled out.

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

publish_sessionSave session to libraryAInspect

Save a session transcript (JSONL) to your private a4sx library. The server scrubs token-shaped secrets before storing. Private: it is never listed publicly by this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
titleNo
parentNoLibrary id this session continues from (lineage).
transcriptYesThe session transcript as JSONL (Claude Code or Codex CLI format; detected automatically).
visibilityNoAlways private. Listing publicly is a separate step in the web app.private
content_sha256NoHex SHA-256 of the transcript's UTF-8 bytes; checked.
client_scrubbedNoThe client scrubbed before sending. The server scrubs again regardless.
idempotency_keyNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only cover the safety quadrants (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds genuinely non-obvious behavior: the server scrubs token-shaped secrets before storing, and the stored session is private and never listed publicly by this tool. It omits auth requirements, size limits, and what happens on a content_sha256 mismatch, so it is strong but not exhaustive.

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?

Three short sentences, front-loaded with the action and resource, no filler. The final privacy sentence partially duplicates the visibility enum's own 'Always private' description, which is the only mild redundancy.

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?

For an 8-parameter write tool with no output schema, the definition covers purpose, scrubbing, and privacy but says nothing about what the call returns (library id / lineage handle), authentication requirements, or failure modes such as hash mismatch. Reasonably complete but with clear gaps an agent would want filled.

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 63%, so the schema already documents parent, transcript, visibility, content_sha256, and client_scrubbed. The description only re-touches the transcript format and the scrubbing that relates to client_scrubbed, and adds nothing about label, title, or idempotency_key. This matches the baseline for moderate coverage.

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 states a specific verb+resource and scope: 'Save a session transcript (JSONL) to your private a4sx library.' That clearly separates it from read-side siblings like search_sessions, get_session_summary, and acquire_session. It stops short of naming any sibling explicitly, so it is clear but not fully differentiated.

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?

Usage is implied (save a transcript when you want to persist it), and the closing line hints that public listing is a separate web-app step, but there is no explicit when-to-use/when-not statement, no precondition guidance, and no named alternative such as acquire_session. Adequate but leaves routing to inference.

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

search_sessionsSearch sessionsA
Read-onlyIdempotent
Inspect

Search vetted, published coding-agent sessions on a4sx (reviewed marketplace listings), or your own saved sessions with scope=library. Returns ids to use with the other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
tagsNo
limitNo
queryNoFree-text search. Empty = browse.
scopeNo`public`: vetted marketplace listings (no sign-in needed). `library`: your own saved sessions (needs library:read).public
offsetNo
harnessNoOnly sessions recorded with these harnesses (claude-code, codex-cli, gemini-cli, opencode, grok-build; unknown = not identified). Only Claude Code sessions can be resumed today; the others are view & buy.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnly/idempotent/non-destructive/closed-world, so the bar is lower. The description still adds real context beyond structured fields: these are vetted, reviewed marketplace listings, and the output is ids intended for subsequent tools. It does not describe pagination behavior, but that is minor given the annotation coverage.

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, front-loaded with the primary scope and immediately followed by the return-value note. No filler, nothing redundant.

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 7-param, no-output-schema search tool, the description covers purpose, both scopes, and the return shape (ids for other tools). It omits pagination/sort hints, but the schema handles those, so nothing essential to correct invocation is missing.

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 only 43% (sort, tags, limit, offset undocumented), so the description must carry some weight. It reinforces the scope semantics ('reviewed marketplace listings' vs. 'your own saved sessions') but largely restates what the schema's scope description already says, leaving the four undocumented params untouched.

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 a specific verb (Search) and resource (coding-agent sessions), and splits the resource into two clearly named modes: vetted marketplace listings vs. scope=library saved sessions. An agent can tell this apart from the fetch/get siblings without opening any schema.

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?

Distinguishes the two operational modes (public marketplace, no sign-in vs. library needs library:read) and signals this is the entry point by noting it 'Returns ids to use with the other tools.' It stops short of explicit when-not-to-use guidance or naming the sibling that consumes those ids.

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. 5 tool updatesv0.1.0
    • First observedacquire_session
    • First observedfetch_session_context
    • First observedget_session_summary
    • First observedpublish_session
    • First observedsearch_sessions

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool occupies a distinct stage of the session workflow: search finds IDs, get_session_summary inspects, acquire_session adds to library, fetch_session_context loads it, and publish_session stores transcripts. The descriptions explicitly clarify boundaries (e.g. acquire never buys, publish is private), leaving no realistic confusion.

Naming Consistency5/5

All five tools follow a consistent snake_case verb_noun pattern (search_, get_, acquire_, fetch_, publish_ + noun). Verb choices are predictable and readable with no mixed conventions.

Tool Count5/5

Five tools cleanly map to the discover-inspect-acquire-load-publish lifecycle of a session marketplace/library. Nothing feels redundant or missing for the stated scope.

Completeness4/5

The full core workflow is covered: search, inspect, acquire, load context, and publish. Minor gaps exist, such as no explicit tool to remove or manage library entries or list one's own library contents beyond scope=library search, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables multiple coding agents (Claude Code, Codex, Cursor) to discover each other's sessions, search transcripts, ask questions, and handoff tasks through a shared MCP server.
    5
    2 npm
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables AI coding agents to persistently store and retrieve conversation history with hybrid semantic and keyword search, cross-encoder reranking, session filtering, and archiving through MCP tools.
    -