a4sx-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@a4sx-mcpSearch my private library for the session where I set up OAuth and load it as context."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 vetted public sessions ( | library scope only |
| Describe one session before using it: outline, members, price, provenance | library source only |
| Copy a marketplace session you are entitled to (free, bought or granted) into your private library | yes |
| Load a session from your library as starting context, cut to | yes |
| Save a transcript (JSONL) to your private library | yes |
Safety rules:
acquire_sessionnever buys. For a paid listing you have no purchase or grant for, it returnsstatus: "payment_required"with the price and the listing URL (or, when the listing's session is sold on its own, thememberto 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
harnessit was recorded with ({id, version};unknownwhen not identified), andresumableisfalsefor a session recorded with another harness.fetch_session_contextrenders such a session from its stored canonical form.publish_sessiononly saves privately.visibilityaccepts 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 atype; a Claude Code user or assistant turn with a session id, or a Codex CLIsession_metarecord 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 thea4sxSDK, 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 (itsparent, 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_sessionandpublish_sessionare markedreadOnlyHint: 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_contextalways 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### Userheading. The title is one line of at most 200 characters, and cutting tomax_tokensnever removes the notice or the closing line.search_sessionsandget_session_summaryresults 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 saystruncated: true, andnext_offsetresumes 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 getsuntrusted: trueand 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_sessioncall (usea4sx pushfor larger ones); per process, at most 240 requests (tools/listandtools/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.
Sign in once with the
a4sxCLI. The MCP server reuses that sign-in:uvx a4sx loginSearching 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.Add the server to your client.
Claude Code
claude mcp add a4sx -- uvx a4sx-mcpClaude 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 |
| The a4sx server. Default: the one you signed in to, else |
| A token to use instead of the stored sign-in (for CI), and the server it belongs to (default |
| Where the |
|
|
| Lower or raise the 2 MiB |
| Local rate limits (240, 20, 10 per minute). |
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/mcpThis 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
harnessfilter), 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,noticefield, per-field caps, 64 KiB result bound and hint line ofsearch_sessions,get_session_summaryandacquire_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_transcriptandno_transcript;JSON-RPC error
-32029when the overall request limit is exceeded.
Differences of this local server:
Sign-in. It uses your
a4sx loginsession, so it can do everything your account can in your own library. The hosted server takes a scoped OAuth token (it advertiseslibrary: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 returnnot_signed_in; the hosted server answers with an OAuth challenge instead. Thecredential_not_acceptedmessage says to runa4sx loginrather 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_scomes from the API's error body, not from theRetry-Afterheader.untrusted. Besidesacquired_fromon the row and its parents (which is all the hosted server checks), it also uses this machine's record of untrusted sessions from thea4sxSDK. 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-SHA256sent 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.parentis 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 witha4sx resumegets its parent edge from the SDK's local lineage record. The hosted server records no edge.The result has extra
client_redactionsanduntrustedfields.
payment_required. The price comes from the public listing; the hosted server reads its pricing store.Server name. It is
a4sx-mcpin 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 testMCP 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 lintThe 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 toolsacquire_sessionAcquire sessionAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Marketplace listing id (from search_sessions). | |
| tenant | No | Owning workspace of a marketplace listing (from search results). Optional. | |
| version | No | latest |
TDQS
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.
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.
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.
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.
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.
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 contextARead-onlyIdempotentInspect
Load a session from your library (saved, or added with acquire_session) as starting context for this conversation, sized to max_tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Library id: one of your saved sessions, or the library_id acquire_session returned for a marketplace listing. | |
| version | No | ||
| max_tokens | No | Context budget. Long sessions keep the opening request and the newest turns that fit; the middle is elided. | |
| include_tool_calls | No | Add one-line stubs for tool calls and results. |
TDQS
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.
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.
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.
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.
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.
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 summaryARead-onlyIdempotentInspect
Describe one session before using it: what it did, outline, price, and whether you already have access. source=marketplace (default) or library.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| source | No | marketplace | |
| tenant | No | Owning workspace of a marketplace listing (from search results). Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| title | No | ||
| parent | No | Library id this session continues from (lineage). | |
| transcript | Yes | The session transcript as JSONL (Claude Code or Codex CLI format; detected automatically). | |
| visibility | No | Always private. Listing publicly is a separate step in the web app. | private |
| content_sha256 | No | Hex SHA-256 of the transcript's UTF-8 bytes; checked. | |
| client_scrubbed | No | The client scrubbed before sending. The server scrubs again regardless. | |
| idempotency_key | No |
TDQS
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.
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.
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.
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.
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.
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 sessionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevance | |
| tags | No | ||
| limit | No | ||
| query | No | Free-text search. Empty = browse. | |
| scope | No | `public`: vetted marketplace listings (no sign-in needed). `library`: your own saved sessions (needs library:read). | public |
| offset | No | ||
| harness | No | Only 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
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.
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.
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.
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.
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.
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.
5 tool updates
v0.1.0- First observed
acquire_session - First observed
fetch_session_context - First observed
get_session_summary - First observed
publish_session - First observed
search_sessions
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
- KogniteOAuthdev.kognite
Hosted agent memory: store, search, and recall facts across sessions from any MCP client.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
AI-agent-first offers directory: search and publish listings via MCP.
Hosted MCP memory: save sessions/decisions once, search from Claude, Cursor, ChatGPT. EU-hosted FTS.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceBrowse, search, rename, split, and clean up Claude Code sessions via MCP, Web UI, or VSCode extension.022MIT
- AlicenseAqualityBmaintenanceEnables 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.52 npmMIT
- AlicenseAqualityBmaintenanceMCP server for sharing, searching, and pulling AI coding-agent sessions (Claude Code and Codex) directly from the agent, with automatic capture and link-based sharing.5MIT
- FlicenseNot gradedqualityFmaintenanceEnables 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.-