mcp-context-card 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,7 +29,7 @@
29
29
  "displayName": "mcp-context-card — agent identity (.fafa)",
30
30
  "type": "application/vnd.fafa+yaml",
31
31
  "mediaType": "application/vnd.fafa+yaml",
32
- "description": "Reference MCP server that makes a project's context (AGENTS.md), memory, and identity discoverable to any MCP client, through the Server Card _meta block and a self-published ai-catalog.json.",
32
+ "description": "An MCP server that makes a project's context (AGENTS.md), cross-session memory, and identity discoverable to any MCP client, through the Server Card _meta block and a self-published ai-catalog.json.",
33
33
  "url": "./.well-known/fafa",
34
34
  "_meta": {
35
35
  "io.github.wolfe-jam.mcp-context-card/iana": "https://www.iana.org/assignments/media-types/application/vnd.fafa+yaml"
package/.well-known/fafa CHANGED
@@ -8,11 +8,11 @@ version: "1.0"
8
8
  agent:
9
9
  name: "mcp-context-card"
10
10
  displayName: "mcp-context-card"
11
- vendor: "reference"
12
- version: "0.5.0"
11
+ vendor: "io.github.wolfe-jam"
12
+ version: "0.5.1"
13
13
  description: >-
14
- Reference MCP server that makes a project's context (AGENTS.md), memory,
15
- and identity discoverable to any MCP client, through the Server Card _meta
16
- block and a self-published ai-catalog.json.
17
- status: "reference"
14
+ An MCP server that makes a project's context (AGENTS.md), cross-session
15
+ memory, and identity discoverable to any MCP client, through the Server
16
+ Card _meta block and a self-published ai-catalog.json.
17
+ status: "published"
18
18
  license: "MIT"
package/CHANGELOG.md CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  All notable changes to this project. Adheres to [Semantic Versioning](https://semver.org).
4
4
 
5
+ ## 0.5.1
6
+
7
+ First-hour ergonomics and wording, from the 0.5.0 soak.
8
+
9
+ - `--help` / `-h` and `--version` / `-V` (and the `help` / `version` subcommands)
10
+ — a bare `mcp-context-card` is a stdio server that waits on stdin, so at a
11
+ terminal it looked idle with no way to ask what it was.
12
+ - stdio mode now prints one line to **stderr** on start
13
+ (`… · stdio · waiting for an MCP host on stdin`) — mirrors what `--http`
14
+ already did. stdout stays clean for the JSON-RPC wire.
15
+ - The npm and `server.json` descriptions no longer open with "Reference MCP
16
+ server" — they now match the README ("An MCP server that makes a project's
17
+ context, memory, and identity discoverable…"). Same in `.well-known/fafa`;
18
+ the three `project.fafm` facts are `type: fact`. `package.json` `author` set
19
+ to the LICENSE holder.
20
+ - `.well-known/fafa` — `vendor: io.github.wolfe-jam`, `status: published`
21
+ (were both `reference`). Shows in `whoami` and as the card's pills.
22
+ - **Fix:** `remember` on a project that has never had a `project.fafm` threw
23
+ `ENOENT` instead of starting one — the single most common first-use case.
24
+ Found by a real host check (Cursor, 2026-09-04). `remember` now creates a
25
+ fresh `.fafm` on first write; `forget` and `parseFafm` were already safe on
26
+ a missing file and are unchanged in behaviour.
27
+ - `docs/WIRING.md`: a note on hosts whose spawn `PATH` lacks `npx`
28
+ (`spawn npx ENOENT`, observed in Cursor) — point `command` at `node` +
29
+ the installed `dist/bin.js` instead.
30
+
5
31
  ## 0.5.0
6
32
 
7
33
  The first public release — installable, and settling in the open before a
@@ -70,6 +96,6 @@ tested server.
70
96
 
71
97
  ## v0.1.0 (2026-08-12)
72
98
 
73
- - Initial private reference implementation (as `faf-trinity`): project context,
99
+ - Initial private implementation (as `faf-trinity`): project context,
74
100
  persistent memory, and agent identity in one MCP server, through two
75
101
  mechanisms already live in production. `demo.ts` proved all three.
package/dist/bin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- export type Mode = "stdio" | "http" | "card";
2
+ export type Mode = "stdio" | "http" | "card" | "help" | "version";
3
3
  export interface Launch {
4
4
  mode: Mode;
5
5
  /** port for http mode (ignored otherwise). */
@@ -7,14 +7,18 @@ export interface Launch {
7
7
  /** directory to read from — cwd for `card`, else MCP_CONTEXT_CARD_ROOT ?? package root. */
8
8
  root: string;
9
9
  }
10
+ /** what a bare `--help` / `help` prints. */
11
+ export declare const HELP = "mcp-context-card 0.5.1\nServe a project's context (AGENTS.md), memory, and identity over MCP.\n\nUSAGE\n mcp-context-card stdio MCP server \u2014 what an MCP host spawns (default)\n mcp-context-card --http stateless Streamable HTTP on PORT (default 3000)\n mcp-context-card --stdio force stdio even when PORT is set\n mcp-context-card card [> f.html] render this directory's context card to stdout\n --theme light|dark --accent #hex\n mcp-context-card --help this text\n mcp-context-card --version print version\n\nENV\n MCP_CONTEXT_CARD_ROOT read AGENTS.md / project.fafm / .well-known/ from here\n PORT if set, run HTTP instead of stdio\n\nA bare run is an stdio server: it waits for a host to speak JSON-RPC on stdin,\nso it looks idle at a terminal. Try `card` or `--http` to see output directly.\nhttps://github.com/Wolfe-Jam/mcp-context-card\n";
10
12
  /**
11
13
  * Decide how to launch, from argv + env. Pure — so the mode matrix is unit
12
14
  * tested without spawning a process.
13
15
  *
14
- * card → render the cwd's card to stdout
15
- * (nothing) → stdio
16
- * --http | PORT=<n> → http
17
- * --stdio → stdio, even when PORT is set
16
+ * --help | -h | help → print usage
17
+ * --version | -V | version → print version
18
+ * card → render the cwd's card to stdout
19
+ * (nothing) → stdio
20
+ * --http | PORT=<n> → http
21
+ * --stdio → stdio, even when PORT is set
18
22
  */
19
23
  export declare function resolveLaunch(argv: readonly string[], env?: NodeJS.ProcessEnv): Launch;
20
24
  /** value of `--flag <value>` in argv, or undefined. */
package/dist/bin.js CHANGED
@@ -8,6 +8,8 @@
8
8
  * mcp-context-card --stdio → force stdio even when PORT is set
9
9
  * mcp-context-card card → render THIS directory's context card to stdout
10
10
  * ( > card.html · --theme light|dark · --accent #hex )
11
+ * mcp-context-card --help → usage
12
+ * mcp-context-card --version → version
11
13
  *
12
14
  * MCP_CONTEXT_CARD_ROOT=/path/to/project → read AGENTS.md / project.fafm /
13
15
  * .well-known/ from there instead of the package's own bundled copies.
@@ -15,17 +17,46 @@
15
17
  import { resolve } from "node:path";
16
18
  import { pathToFileURL } from "node:url";
17
19
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
20
+ import { NAME, VERSION } from "./constants.js";
18
21
  import { ROOT, serve } from "./server.js";
22
+ /** what a bare `--help` / `help` prints. */
23
+ export const HELP = `${NAME} ${VERSION}
24
+ Serve a project's context (AGENTS.md), memory, and identity over MCP.
25
+
26
+ USAGE
27
+ mcp-context-card stdio MCP server — what an MCP host spawns (default)
28
+ mcp-context-card --http stateless Streamable HTTP on PORT (default 3000)
29
+ mcp-context-card --stdio force stdio even when PORT is set
30
+ mcp-context-card card [> f.html] render this directory's context card to stdout
31
+ --theme light|dark --accent #hex
32
+ mcp-context-card --help this text
33
+ mcp-context-card --version print version
34
+
35
+ ENV
36
+ MCP_CONTEXT_CARD_ROOT read AGENTS.md / project.fafm / .well-known/ from here
37
+ PORT if set, run HTTP instead of stdio
38
+
39
+ A bare run is an stdio server: it waits for a host to speak JSON-RPC on stdin,
40
+ so it looks idle at a terminal. Try \`card\` or \`--http\` to see output directly.
41
+ https://github.com/Wolfe-Jam/mcp-context-card
42
+ `;
19
43
  /**
20
44
  * Decide how to launch, from argv + env. Pure — so the mode matrix is unit
21
45
  * tested without spawning a process.
22
46
  *
23
- * card → render the cwd's card to stdout
24
- * (nothing) → stdio
25
- * --http | PORT=<n> → http
26
- * --stdio → stdio, even when PORT is set
47
+ * --help | -h | help → print usage
48
+ * --version | -V | version → print version
49
+ * card → render the cwd's card to stdout
50
+ * (nothing) → stdio
51
+ * --http | PORT=<n> → http
52
+ * --stdio → stdio, even when PORT is set
27
53
  */
28
54
  export function resolveLaunch(argv, env = process.env) {
55
+ const has = (...flags) => flags.some((f) => argv.includes(f));
56
+ if (argv[0] === "help" || has("--help", "-h"))
57
+ return { mode: "help", port: 0, root: ROOT };
58
+ if (argv[0] === "version" || has("--version", "-V"))
59
+ return { mode: "version", port: 0, root: ROOT };
29
60
  if (argv[0] === "card") {
30
61
  return {
31
62
  mode: "card",
@@ -49,7 +80,13 @@ export function flagValue(argv, flag) {
49
80
  if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
50
81
  const argv = process.argv.slice(2);
51
82
  const { mode, port, root } = resolveLaunch(argv);
52
- if (mode === "card") {
83
+ if (mode === "help") {
84
+ process.stdout.write(HELP);
85
+ }
86
+ else if (mode === "version") {
87
+ process.stdout.write(`${VERSION}\n`);
88
+ }
89
+ else if (mode === "card") {
53
90
  const { renderCard, safeAccent } = await import("./render-card.js");
54
91
  const theme = flagValue(argv, "--theme");
55
92
  process.stdout.write(renderCard(root, {
@@ -62,9 +99,12 @@ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
62
99
  const { serve: serveHttp } = await import("@hono/node-server");
63
100
  serveHttp({ fetch: httpApp(root).fetch, port });
64
101
  // stderr, not stdout — stdout is the MCP wire in stdio mode.
65
- console.error(`mcp-context-card · http · :${port} (POST /mcp · GET /card · GET /.well-known/*)`);
102
+ console.error(`${NAME} · http · :${port} (POST /mcp · GET /card · GET /.well-known/*)`);
66
103
  }
67
104
  else {
105
+ // stderr so it never touches the JSON-RPC wire on stdout; a bare run at a
106
+ // terminal otherwise looks hung.
107
+ console.error(`${NAME} · stdio · waiting for an MCP host on stdin (--help for usage · Ctrl-C to exit)`);
68
108
  await serve(new StdioServerTransport(), root);
69
109
  }
70
110
  }
@@ -1,5 +1,5 @@
1
1
  /** Server identity constants, in their own module so any file can import
2
2
  * them without pulling in the whole server. */
3
3
  export declare const NAME = "mcp-context-card";
4
- export declare const VERSION = "0.5.0";
4
+ export declare const VERSION = "0.5.1";
5
5
  export declare const SERVER_CARD_URI = "mcp-context-card://server-card";
package/dist/constants.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Server identity constants, in their own module so any file can import
2
2
  * them without pulling in the whole server. */
3
3
  export const NAME = "mcp-context-card";
4
- export const VERSION = "0.5.0";
4
+ export const VERSION = "0.5.1";
5
5
  export const SERVER_CARD_URI = "mcp-context-card://server-card";
@@ -27,8 +27,29 @@ function factMap(entries) {
27
27
  m.set(k, q(v));
28
28
  return m;
29
29
  }
30
+ /** A brand-new .fafm — what `remember()` writes the first time a project has none. */
31
+ const FRESH_FAFM = `version: "1.1"
32
+ memory:
33
+ facts: []
34
+ sessions: []
35
+ preferences: {}
36
+ custom: {}
37
+ `;
38
+ /**
39
+ * Load the .fafm at `path`. A missing file is not an error here — it means
40
+ * "no memory yet", and remember()/forget() need a document to edit even
41
+ * before anything has ever been written. Any other read error (permissions,
42
+ * a directory in the way, …) still throws.
43
+ */
30
44
  function load(path) {
31
- return parseDocument(readFileSync(path, "utf8"));
45
+ try {
46
+ return parseDocument(readFileSync(path, "utf8"));
47
+ }
48
+ catch (err) {
49
+ if (err.code === "ENOENT")
50
+ return parseDocument(FRESH_FAFM);
51
+ throw err;
52
+ }
32
53
  }
33
54
  export function parseFafm(path) {
34
55
  let doc;
@@ -4,9 +4,9 @@
4
4
  * A Hono app. `POST /mcp` is the MCP endpoint, run **stateless**: a fresh
5
5
  * server + transport per request, `sessionIdGenerator: undefined`, and
6
6
  * `enableJsonResponse` so every response is a complete JSON body (no SSE
7
- * stream, nothing to keep open). That's the right default for a reference
8
- * server — it scales horizontally, needs no sticky sessions, and there's
9
- * no per-connection state to leak. A server that needs server-streamed
7
+ * stream, nothing to keep open). That's the right default here — it scales
8
+ * horizontally, needs no sticky sessions, and there's no per-connection
9
+ * state to leak. A server that needs server-streamed
10
10
  * notifications or resumability would set a `sessionIdGenerator` and hold
11
11
  * transports in a map; this one deliberately does not.
12
12
  *
@@ -5,7 +5,7 @@ mechanisms that already exist in the MCP ecosystem. This is the wire‑level
5
5
  detail.
6
6
 
7
7
  The **context** concern points at `AGENTS.md` (`text/markdown`). Memory and
8
- identity have no de‑facto standard, so the reference points them at `.fafm` and
8
+ identity have no de‑facto standard, so this server points them at `.fafm` and
9
9
  `.fafa`. Everything below is about the *shape* — swap the artifacts and the
10
10
  mechanism is unchanged.
11
11
 
package/docs/TRANSPORT.md CHANGED
@@ -81,6 +81,6 @@ streaming tools would flip this. See `src/transport/http.ts`.
81
81
 
82
82
  ### DNS-rebinding protection
83
83
 
84
- Off by default (a reference server should run anywhere with no config). For
85
- a real deployment, pass `allowedHosts` / `allowedOrigins` to the transport
86
- and set `enableDnsRebindingProtection: true`.
84
+ Off by default (the server should run anywhere with no config). For a real
85
+ deployment, pass `allowedHosts` / `allowedOrigins` to the transport and set
86
+ `enableDnsRebindingProtection: true`.
package/docs/WIRING.md CHANGED
@@ -26,6 +26,13 @@
26
26
  - **`MCP_CONTEXT_CARD_ROOT`** — directory holding `AGENTS.md`, `project.fafm`, and
27
27
  `.well-known/fafa`. Omit it and the server uses its own bundled copies.
28
28
  - `stdout` is the JSON‑RPC wire; logging is on `stderr`.
29
+ - **`command: "npx"` fails to spawn on some hosts** (`spawn npx ENOENT`) — the
30
+ host's process spawn doesn't inherit a shell `PATH` that has `npx` on it,
31
+ even though a login shell does. Observed with Cursor. Fix: point `command`
32
+ at an absolute path to `node`, with the installed package's `dist/bin.js` as
33
+ the arg — e.g. `command: "node"`, `args: ["/path/to/node_modules/mcp-context-card/dist/bin.js"]`
34
+ (or wherever `npm install -g` / your package manager put it; find it with
35
+ `npm root -g` or `which mcp-context-card` after a global install).
29
36
 
30
37
  ### Streamable HTTP (remote)
31
38
 
@@ -72,7 +79,10 @@ And to discover what a server offers before committing to it:
72
79
  await client.callTool({ name: "list_context_sources", arguments: {} });
73
80
  // → { context: { source: "AGENTS.md", mediaType: "text/markdown", present: true, sections: 9 },
74
81
  // memory: { … }, identity: { … },
75
- // surfaces: { serverCard: [...], aiCatalog: [...] } }
82
+ // surfaces: { mcp: { serverCard: "resource mcp-context-card://server-card" },
83
+ // http: { serverCard: "GET /.well-known/mcp/server-card",
84
+ // aiCatalog: "GET /.well-known/ai-catalog.json",
85
+ // card: "GET /card" } } }
76
86
  ```
77
87
 
78
88
  ---
package/docs/card.html CHANGED
@@ -73,7 +73,7 @@ section:last-child{border-bottom:0}
73
73
  <main class="card">
74
74
  <div class="top">
75
75
  <h1>mcp-context-card</h1>
76
- <div class="pills"><span class="pill">v0.5.0</span><span class="pill accent">reference</span><span class="pill">MIT</span></div>
76
+ <div class="pills"><span class="pill">io.github.wolfe-jam</span><span class="pill">v0.5.1</span><span class="pill accent">published</span><span class="pill">MIT</span></div>
77
77
  </div>
78
78
  <section>
79
79
  <p class="label">Context — AGENTS.md</p>
@@ -105,7 +105,7 @@ npm run demo # end to end: all tools over stdio, then over stateless HT
105
105
  </section>
106
106
  <section>
107
107
  <p class="label">Memory — 3 facts</p>
108
- <div class="fact"><p>The context concern points at AGENTS.md — the de-facto standard for agent instructions. read_agents_md serves it whole or one section at a time, so a client pulls '## Test' without spending its context window on the whole file. Memory and identity have no de-facto standard, so the reference uses .fafm and .fafa as one instantiation each.</p><div class="meta"><span class="tag">scope</span><span class="tag">agents-md</span><span class="dot" title="verified"></span></div></div><div class="fact"><p>Both exposure mechanisms — the Server Card _meta block and a self-published ai-catalog.json — already exist in the MCP ecosystem. This server wires all three concerns through them, from one set of source files, with a CI check (catalog:check) that fails if the two surfaces drift apart.</p><div class="meta"><span class="tag">mcp</span><span class="tag">server-card</span><span class="tag">ai-catalog</span><span class="dot" title="verified"></span></div></div><div class="fact"><p>Distribution: a published npm package (bin <code>mcp-context-card</code>, dual transport). The three source files (AGENTS.md, project.fafm, .well-known/fafa) ship with the package so it is a working discovery target on install. MCP_CONTEXT_CARD_ROOT points it at a real project.</p><div class="meta"><span class="tag">distribution</span><span class="tag">mit</span><span class="tag">npm</span><span class="dot" title="verified"></span></div></div>
108
+ <div class="fact"><p>The context concern points at AGENTS.md — the de-facto standard for agent instructions. read_agents_md serves it whole or one section at a time, so a client pulls '## Test' without spending its context window on the whole file. Memory and identity have no de-facto standard, so this server uses .fafm and .fafa as one instantiation each.</p><div class="meta"><span class="tag">scope</span><span class="tag">agents-md</span><span class="dot" title="verified"></span></div></div><div class="fact"><p>Both exposure mechanisms — the Server Card _meta block and a self-published ai-catalog.json — already exist in the MCP ecosystem. This server wires all three concerns through them, from one set of source files, with a CI check (catalog:check) that fails if the two surfaces drift apart.</p><div class="meta"><span class="tag">mcp</span><span class="tag">server-card</span><span class="tag">ai-catalog</span><span class="dot" title="verified"></span></div></div><div class="fact"><p>Distribution: a published npm package (bin <code>mcp-context-card</code>, dual transport). The three source files (AGENTS.md, project.fafm, .well-known/fafa) ship with the package so it is a working discovery target on install. MCP_CONTEXT_CARD_ROOT points it at a real project.</p><div class="meta"><span class="tag">distribution</span><span class="tag">mit</span><span class="tag">npm</span><span class="dot" title="verified"></span></div></div>
109
109
  </section>
110
110
  <section>
111
111
  <p class="label">Discovery</p>
package/docs/img/card.png CHANGED
Binary file
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "mcp-context-card",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "mcpName": "io.github.wolfe-jam/mcp-context-card",
5
- "description": "Reference MCP server: project context, persistent memory, and agent identity — through the two exposure surfaces already in the ecosystem (Server Card _meta, ai-catalog sibling entries).",
5
+ "description": "An MCP server that makes a project's context (AGENTS.md), cross-session memory, and identity discoverable to any MCP client — through the Server Card _meta block and ai-catalog.json sibling entries.",
6
6
  "keywords": [
7
7
  "mcp",
8
8
  "model-context-protocol",
@@ -12,7 +12,7 @@
12
12
  "agent-memory",
13
13
  "agent-identity"
14
14
  ],
15
- "author": "wolfejam",
15
+ "author": "James Wolfe",
16
16
  "license": "MIT",
17
17
  "type": "module",
18
18
  "private": false,
package/project.fafm CHANGED
@@ -17,9 +17,9 @@ index:
17
17
 
18
18
  memory:
19
19
  facts:
20
- - text: "The context concern points at AGENTS.md — the de-facto standard for agent instructions. read_agents_md serves it whole or one section at a time, so a client pulls '## Test' without spending its context window on the whole file. Memory and identity have no de-facto standard, so the reference uses .fafm and .fafa as one instantiation each."
20
+ - text: "The context concern points at AGENTS.md — the de-facto standard for agent instructions. read_agents_md serves it whole or one section at a time, so a client pulls '## Test' without spending its context window on the whole file. Memory and identity have no de-facto standard, so this server uses .fafm and .fafa as one instantiation each."
21
21
  id: "mcp-context-card-scope"
22
- type: "reference"
22
+ type: "fact"
23
23
  priority: "high"
24
24
  tags: ["scope", "agents-md"]
25
25
  source: "README.md"
@@ -27,7 +27,7 @@ memory:
27
27
 
28
28
  - text: "Both exposure mechanisms — the Server Card _meta block and a self-published ai-catalog.json — already exist in the MCP ecosystem. This server wires all three concerns through them, from one set of source files, with a CI check (catalog:check) that fails if the two surfaces drift apart."
29
29
  id: "mechanisms-already-proven"
30
- type: "reference"
30
+ type: "fact"
31
31
  priority: "high"
32
32
  tags: ["mcp", "server-card", "ai-catalog"]
33
33
  links: ["mcp-context-card-scope"]
@@ -36,7 +36,7 @@ memory:
36
36
 
37
37
  - text: "Distribution: a published npm package (bin `mcp-context-card`, dual transport). The three source files (AGENTS.md, project.fafm, .well-known/fafa) ship with the package so it is a working discovery target on install. MCP_CONTEXT_CARD_ROOT points it at a real project."
38
38
  id: "distribution-model"
39
- type: "reference"
39
+ type: "fact"
40
40
  priority: "standard"
41
41
  tags: ["distribution", "mit", "npm"]
42
42
  source: "README.md"
package/server.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.wolfe-jam/mcp-context-card",
4
4
  "title": "mcp-context-card",
5
- "description": "Reference MCP server that makes a project's context (AGENTS.md), memory, and identity discoverable to any MCP client — through the Server Card _meta block and ai-catalog.json sibling entries.",
6
- "version": "0.5.0",
5
+ "description": "An MCP server that makes a project's context (AGENTS.md), cross-session memory, and identity discoverable to any MCP client — through the Server Card _meta block and ai-catalog.json sibling entries.",
6
+ "version": "0.5.1",
7
7
  "repository": {
8
8
  "url": "https://github.com/Wolfe-Jam/mcp-context-card",
9
9
  "source": "github"
@@ -13,7 +13,7 @@
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "mcp-context-card",
16
- "version": "0.5.0",
16
+ "version": "0.5.1",
17
17
  "runtimeHint": "npx",
18
18
  "transport": {
19
19
  "type": "stdio"
@@ -21,7 +21,7 @@
21
21
  "environmentVariables": [
22
22
  {
23
23
  "name": "MCP_CONTEXT_CARD_ROOT",
24
- "description": "Directory holding project.faf / project.fafm / .well-known/fafa. Omitted → the server's own bundled reference copies.",
24
+ "description": "Directory holding project.faf / project.fafm / .well-known/fafa. Omitted → the server's own bundled copies.",
25
25
  "isRequired": false
26
26
  }
27
27
  ]