mcp-context-card 1.6.1 → 1.7.0

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.
@@ -11,7 +11,7 @@
11
11
  "data": {
12
12
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
13
13
  "name": "io.github.Wolfe-Jam/mcp-context-card",
14
- "version": "1.6.1",
14
+ "version": "1.7.0",
15
15
  "title": "MCP Context Card",
16
16
  "description": "MCP server for a project's context (AGENTS.md), memory, and identity — base or drop-in extension.",
17
17
  "websiteUrl": "https://github.com/Wolfe-Jam/mcp-context-card",
package/.well-known/fafa CHANGED
@@ -13,7 +13,7 @@ agent:
13
13
  # a deployment for your own project uses your domain.
14
14
  id: "urn:air:faf.one:agent:mcp-context-card"
15
15
  vendor: "io.github.Wolfe-Jam"
16
- version: "1.6.1"
16
+ version: "1.7.0"
17
17
  description: >-
18
18
  The essential MCP components for a project's context (AGENTS.md),
19
19
  cross-session memory, and identity — a base MCP on its own, or a
@@ -23,6 +23,8 @@ agent:
23
23
  license: "MIT"
24
24
  metadata:
25
25
  cards:
26
+ # The card's colour: AAIF orange. Without one, a card is drawn in ink.
27
+ accent: "#FF702D"
26
28
  packages:
27
29
  - registryType: "npm"
28
30
  identifier: "mcp-context-card"
package/AGENTS.md CHANGED
@@ -15,7 +15,7 @@ connection.
15
15
  npm ci
16
16
  ```
17
17
 
18
- Node 20 or newer. No other system dependencies.
18
+ Node 22 or newer. No other system dependencies.
19
19
 
20
20
  ## Build
21
21
 
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
 
3
3
  All notable changes to this project. Adheres to [Semantic Versioning](https://semver.org).
4
4
 
5
+ ## 1.7.0
6
+
7
+ A card's colour is the owner's.
8
+
9
+ - **No colour declared = ink.** A card is drawn in its own ink, black on a
10
+ light card and white on a dark one, unless a colour is declared. Nothing
11
+ is guessed. The monogram's letter takes the card colour, so it stays
12
+ readable. Before, every card defaulted to the AAIF orange.
13
+ - **The owner declares it in the `.fafa`:** `metadata.cards.accent: "#0066cc"`.
14
+ A colour passed in (`--accent`, `?accent`, the tools' `accent`) still
15
+ wins.
16
+ - A bad value, passed or declared, is dropped and the card falls back to
17
+ ink. `safeAccent` now returns `undefined` for anything that isn't a hex
18
+ (it used to return the AAIF orange).
19
+ - This project's own `.fafa` declares the AAIF orange, so its card looks
20
+ the same.
21
+ - Docs: Node 22 or newer (README and AGENTS.md said 20; `engines` has
22
+ required `>=22`).
23
+
5
24
  ## 1.6.1
6
25
 
7
26
  The logo is the first letter.
package/README.md CHANGED
@@ -119,11 +119,14 @@ remembers. `detail: "full"` lists every fact whole. The server's
119
119
  instructions tell the model to show that rather than paste the HTML into
120
120
  the chat.
121
121
 
122
- Light, dark, or auto; the accent defaults to the AAIF palette and takes any hex.
122
+ Light, dark, or auto. The colour is the owner's: set it in the project's
123
+ `.fafa` (`metadata.cards.accent: "#0066cc"`), or pass any hex with `--accent`
124
+ or `?accent`. With none, the card is drawn in ink, black or white; no colour
125
+ is guessed.
123
126
  This repo's own card, live: [auto](https://wolfe-jam.github.io/mcp-context-card/) ·
124
127
  [light](https://wolfe-jam.github.io/mcp-context-card/card-light.html) ·
125
128
  [dark](https://wolfe-jam.github.io/mcp-context-card/card-dark.html)
126
- (all in the AAIF accent shown here — pass any hex to change it).
129
+ (in the AAIF orange its `.fafa` declares).
127
130
 
128
131
  ## Add it to your setup
129
132
 
@@ -177,7 +180,7 @@ directory it was started in if that has an `AGENTS.md`. `list_context_sources`
177
180
  reports which project it picked and how. To pin one project instead, set
178
181
  `"env": { "MCP_CONTEXT_CARD_ROOT": "/abs/path/to/your/project" }`; that always
179
182
  wins. Identity is optional. Over HTTP instead:
180
- `PORT=8080 npx mcp-context-card`. Requires Node ≥20.
183
+ `PORT=8080 npx mcp-context-card`. Requires Node ≥22.
181
184
 
182
185
  HTTP mode is local by default, as the MCP transports spec asks: it binds
183
186
  `127.0.0.1`, refuses foreign browser origins with 403, and refuses DNS names
@@ -271,7 +274,7 @@ over both transports:
271
274
  4. **Discovery** — `list_context_sources()`, then the same server over stateless
272
275
  HTTP with its `.well-known` routes and `GET /card`.
273
276
 
274
- 209 tests on Linux, macOS, and Windows, coverage‑gated in CI.
277
+ 210 tests on Linux, macOS, and Windows, coverage‑gated in CI.
275
278
  `npm run wjttc` runs the WJTTC certification suite (seven tiers, from protocol
276
279
  and Server Card conformance to stdio/HTTP parity and the shipped package). Two spawn a real
277
280
  child process and check a remembered fact survives the restart — one against
package/dist/bin.d.ts CHANGED
@@ -8,7 +8,7 @@ export interface Launch {
8
8
  root: string;
9
9
  }
10
10
  /** what a bare `--help` / `help` prints. */
11
- export declare const HELP = "mcp-context-card 1.6.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 this dir's context card \u2014 opens it in your browser\n at a terminal; HTML to stdout when piped ( > f.html )\n --theme light|dark --accent #hex\n --expanded (all sections open) --portrait --stdout\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 HOST HTTP bind address (default 127.0.0.1, this machine\n only); 0.0.0.0 exposes it, e.g. in a container\n MCP_CONTEXT_CARD_ALLOWED_HOSTS / _ALLOWED_ORIGINS\n comma-separated Host names / browser origins to\n accept besides this machine's own (reverse proxy, web app)\n MCP_CONTEXT_CARD_PUBLISH_MEMORY=1\n HTTP: serve project.fafm, list it in the AI Catalog,\n and show its facts on an exposed /card (off: memory\n is session data). HTTP has no auth\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` (opens your context in a browser) or `--http`.\nhttps://github.com/Wolfe-Jam/mcp-context-card\n";
11
+ export declare const HELP = "mcp-context-card 1.7.0\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 this dir's context card \u2014 opens it in your browser\n at a terminal; HTML to stdout when piped ( > f.html )\n --theme light|dark --accent #hex\n --expanded (all sections open) --portrait --stdout\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 HOST HTTP bind address (default 127.0.0.1, this machine\n only); 0.0.0.0 exposes it, e.g. in a container\n MCP_CONTEXT_CARD_ALLOWED_HOSTS / _ALLOWED_ORIGINS\n comma-separated Host names / browser origins to\n accept besides this machine's own (reverse proxy, web app)\n MCP_CONTEXT_CARD_PUBLISH_MEMORY=1\n HTTP: serve project.fafm, list it in the AI Catalog,\n and show its facts on an exposed /card (off: memory\n is session data). HTTP has no auth\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` (opens your context in a browser) or `--http`.\nhttps://github.com/Wolfe-Jam/mcp-context-card\n";
12
12
  /**
13
13
  * The address the HTTP server binds: `HOST`, else 127.0.0.1. Local by default,
14
14
  * as the MCP transports spec recommends; a hosted deploy sets HOST=0.0.0.0.
@@ -1,7 +1,7 @@
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 = "1.6.1";
4
+ export declare const VERSION = "1.7.0";
5
5
  export declare const SERVER_CARD_URI = "mcp-context-card://server-card";
6
6
  /** The server's registry identity: reverse-DNS, the same as server.json `name`.
7
7
  * It is also `serverInfo.name`, so a Server Card never contradicts the live
package/dist/constants.js CHANGED
@@ -1,7 +1,7 @@
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 = "1.6.1";
4
+ export const VERSION = "1.7.0";
5
5
  export const SERVER_CARD_URI = "mcp-context-card://server-card";
6
6
  /** The server's registry identity: reverse-DNS, the same as server.json `name`.
7
7
  * It is also `serverInfo.name`, so a Server Card never contradicts the live
@@ -50,5 +50,6 @@ function extras(doc) {
50
50
  ...(endpoints.length ? { endpoints } : {}),
51
51
  ...(skills.length ? { skills } : {}),
52
52
  ...(packages.length ? { packages } : {}),
53
+ ...(typeof cards.accent === "string" && cards.accent.trim() ? { accent: cards.accent.trim() } : {}),
53
54
  };
54
55
  }
@@ -48,4 +48,6 @@ export interface AgentIdentity {
48
48
  registryType: string;
49
49
  identifier: string;
50
50
  }[];
51
+ /** The owner's card colour (`.fafa` `metadata.cards.accent`), a hex. Validated when drawn. */
52
+ accent?: string;
51
53
  }
@@ -2,7 +2,10 @@ import type { AgentIdentity } from "./faf/types.js";
2
2
  export type Theme = "light" | "dark" | "auto";
3
3
  export interface CardOptions {
4
4
  theme?: Theme;
5
- /** CSS hex colour for the accent. Validated; invalid falls back to AAIF. */
5
+ /**
6
+ * CSS hex colour for the accent. Validated; invalid is ignored. Wins over the
7
+ * owner's colour; with neither, the card is drawn in ink (black or white).
8
+ */
6
9
  accent?: string;
7
10
  /**
8
11
  * Render every AGENTS.md section open. Default: sections collapse to their
@@ -18,9 +21,10 @@ export interface CardOptions {
18
21
  /** Business-card view. Default `landscape`; the reader can switch it too. */
19
22
  layout?: "landscape" | "portrait";
20
23
  }
21
- /** AAIF brand orange (aaif.io). The default accent. */
24
+ /** AAIF brand orange (aaif.io): this project's own card colour, declared in its `.fafa`. */
22
25
  export declare const AAIF_ACCENT = "#FF702D";
23
- export declare function safeAccent(a?: string): string;
26
+ /** A valid hex colour, or undefined. Nothing else ever reaches the stylesheet. */
27
+ export declare function safeAccent(a?: string): string | undefined;
24
28
  /** What the front calls this thing, from where it runs: "MCP server", "A2A agent", or both. */
25
29
  export declare function cardKind(id: AgentIdentity | null): string[];
26
30
  /** The front's title line: what it is, then its version. Empty when nothing is known. */
@@ -61,6 +65,8 @@ export interface BusinessCard {
61
65
  }[];
62
66
  /** The (i) panel, as already-safe markup. */
63
67
  about: string;
68
+ /** The owner's colour, a hex. None = ink (black or white). */
69
+ accent?: string;
64
70
  }
65
71
  /** How to draw a card: the owner's colour and accent, the view, and the flat (print) layout. */
66
72
  export type RenderOptions = Pick<CardOptions, "theme" | "accent" | "layout" | "expanded">;
@@ -16,18 +16,31 @@ import { parseFafm } from "./memory.js";
16
16
  import { resolveIdentity, serverCardMeta, META_NS } from "./identity.js";
17
17
  import { PUBLISH_MEMORY_ENV, SERVER_CARD_URI } from "./constants.js";
18
18
  import { escapeHtml, renderInline, renderMarkdown, slug } from "./md.js";
19
- /** AAIF brand orange (aaif.io). The default accent. */
19
+ /** AAIF brand orange (aaif.io): this project's own card colour, declared in its `.fafa`. */
20
20
  export const AAIF_ACCENT = "#FF702D";
21
21
  const ACCENT_OK = /^#[0-9a-fA-F]{3}(?:[0-9a-fA-F]{3}(?:[0-9a-fA-F]{2})?)?$/;
22
+ /** A valid hex colour, or undefined. Nothing else ever reaches the stylesheet. */
22
23
  export function safeAccent(a) {
23
- return a && ACCENT_OK.test(a) ? a : AAIF_ACCENT;
24
+ return a && ACCENT_OK.test(a) ? a : undefined;
24
25
  }
26
+ /*
27
+ * No colour = ink. A card's colour is the owner's to declare (or the reader's
28
+ * to pass); nothing is guessed. Without one the accent is the card's own ink:
29
+ * black on a light card, white on a dark one, and the monogram's letter takes
30
+ * the card colour so it stays readable.
31
+ */
32
+ const INK_CSS = `
33
+ :root{--accent:#0a0a0a}
34
+ @media (prefers-color-scheme:dark){:root{--accent:#fafafa}}
35
+ .bcard{--accent:var(--fg)}
36
+ .logo{color:var(--card)}
37
+ `;
25
38
  const CSS = (accent) => `
26
39
  /* The page and the card are themed independently. The page follows the
27
40
  viewer's OS. The card is the owner's choice: body[data-theme] (light | dark;
28
41
  none = follow the OS), and the reader can switch it with the ◐ toggle (#ink). */
29
42
  :root{
30
- --accent:${accent};
43
+ ${accent ? `--accent:${accent};` : ""}
31
44
  --page-bg:#f4f4f5;--page-muted:#6b6b70;--page-line:rgba(0,0,0,.09);--page-chip:rgba(0,0,0,.05);
32
45
  }
33
46
  @media (prefers-color-scheme:dark){
@@ -368,12 +381,13 @@ export function readCard(root, opts = {}) {
368
381
  chips,
369
382
  tabs: tabs.map(([key, label, heading, html]) => ({ key, label, heading, html })),
370
383
  about: AGENT_ABOUT,
384
+ ...(id?.accent ? { accent: id.accent } : {}),
371
385
  };
372
386
  }
373
387
  /** Draw any business card as one self-contained HTML page. */
374
388
  export function renderBusinessCard(card, opts = {}) {
375
389
  const theme = opts.theme ?? "auto";
376
- const accent = safeAccent(opts.accent);
390
+ const accent = safeAccent(opts.accent) ?? safeAccent(card.accent);
377
391
  const portrait = opts.layout === "portrait";
378
392
  const flat = !!opts.expanded;
379
393
  const { name, title, oneLiner, domain } = card;
@@ -405,7 +419,7 @@ export function renderBusinessCard(card, opts = {}) {
405
419
  <meta charset="utf-8">
406
420
  <meta name="viewport" content="width=device-width,initial-scale=1">
407
421
  <title>${escapeHtml(name)} — business card</title>
408
- <style>${CSS(accent)}${tabCss}</style>
422
+ <style>${CSS(accent)}${accent ? "" : INK_CSS}${tabCss}</style>
409
423
  </head>
410
424
  <body${flat ? ` class="flat"` : ""}${htmlAttr(theme)}>
411
425
  <input type="checkbox" id="flip" class="sr" aria-label="Flip the card">
package/dist/server.js CHANGED
@@ -62,7 +62,7 @@ function cardOptions(args) {
62
62
  }
63
63
  const CARD_ARGS = {
64
64
  theme: { type: "string", enum: ["light", "dark", "auto"], description: "default: auto" },
65
- accent: { type: "string", description: "CSS hex colour, e.g. #FF702D (default: the AAIF palette)" },
65
+ accent: { type: "string", description: "CSS hex colour, e.g. #0066cc (default: the .fafa metadata.cards.accent, else black/white ink)" },
66
66
  expanded: { type: "boolean", description: "render every AGENTS.md section open (default: collapsed)" },
67
67
  layout: { type: "string", enum: ["landscape", "portrait"], description: "business-card view (default: landscape)" },
68
68
  };
@@ -32,7 +32,7 @@ Streamable HTTP endpoint at `<origin>/mcp` and its protocol versions):
32
32
  {
33
33
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
34
34
  "name": "io.github.Wolfe-Jam/mcp-context-card",
35
- "version": "1.6.1",
35
+ "version": "1.7.0",
36
36
  "title": "MCP Context Card",
37
37
  "description": "MCP server for a project's context (AGENTS.md), memory, and identity — base or drop-in extension.",
38
38
  "websiteUrl": "https://github.com/Wolfe-Jam/mcp-context-card",
@@ -85,7 +85,7 @@ publisher lists artifacts, each entry keyed by its **media type** (`type`).
85
85
  GET /.well-known/ai-catalog.json
86
86
  ```
87
87
 
88
- Served from `https://ctx.example.com` (1.6.1, this repo's own files):
88
+ Served from `https://ctx.example.com` (1.7.0, this repo's own files):
89
89
 
90
90
  ```jsonc
91
91
  {
@@ -205,7 +205,7 @@ details.ctx-section>.md{padding:0 0 16px}
205
205
  </details>
206
206
  <div class="id">
207
207
  <h1>mcp-context-card</h1>
208
- <p class="title">MCP server · v1.6.1</p>
208
+ <p class="title">MCP server · v1.7.0</p>
209
209
  <p class="oneliner">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity</p>
210
210
  </div>
211
211
  <div class="foot-front"><span class="domain">faf.one</span><div class="pills"><span class="pill">io.github.Wolfe-Jam</span><span class="pill accent">published</span><span class="pill">MIT</span></div></div>
@@ -223,11 +223,11 @@ details.ctx-section>.md{padding:0 0 16px}
223
223
  </div>
224
224
  </details>
225
225
  <div class="tabbar"><label for="t-about">About</label><label for="t-context">Context</label><label for="t-memory">Memory</label><label for="t-discovery">Discovery</label></div>
226
- <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.6.1</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
226
+ <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.7.0</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
227
227
  <div class="ctx-preamble md"><p><code>mcp-context-card</code> is the essential MCP server for a project's <strong>context</strong> (this file), <strong>memory</strong>, and <strong>identity</strong> — usable as your base MCP, or dropped into any existing MCP server as an extension. Discoverable to any MCP client through the two surfaces already in the ecosystem: the Server Card <code>_meta</code> block and <code>ai-catalog.json</code> sibling entries.</p>
228
228
  <p><code>read_agents_md</code> serves this file, section by section, over the same MCP connection.</p></div>
229
229
  <div class="ctx-body"><details class="ctx-section" id="setup"><summary>Setup</summary><div class="md"><pre><code class="language-bash">npm ci</code></pre>
230
- <p>Node 20 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
230
+ <p>Node 22 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
231
231
  npm run typecheck # tsc --noEmit over src/ + test/</code></pre></div></details><details class="ctx-section" id="test"><summary>Test</summary><div class="md"><pre><code class="language-bash">npm test # node:test — every test/*.test.ts
232
232
  npm run test:coverage # + the coverage gate (lines 90 / funcs 85 / branches 80, src/ only)
233
233
  npm run demo # end to end: all tools over stdio, then over stateless HTTP
@@ -205,7 +205,7 @@ details.ctx-section>.md{padding:0 0 16px}
205
205
  </details>
206
206
  <div class="id">
207
207
  <h1>mcp-context-card</h1>
208
- <p class="title">MCP server · v1.6.1</p>
208
+ <p class="title">MCP server · v1.7.0</p>
209
209
  <p class="oneliner">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity</p>
210
210
  </div>
211
211
  <div class="foot-front"><span class="domain">faf.one</span><div class="pills"><span class="pill">io.github.Wolfe-Jam</span><span class="pill accent">published</span><span class="pill">MIT</span></div></div>
@@ -223,11 +223,11 @@ details.ctx-section>.md{padding:0 0 16px}
223
223
  </div>
224
224
  </details>
225
225
  <div class="tabbar"><label for="t-about">About</label><label for="t-context">Context</label><label for="t-memory">Memory</label><label for="t-discovery">Discovery</label></div>
226
- <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.6.1</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
226
+ <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.7.0</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
227
227
  <div class="ctx-preamble md"><p><code>mcp-context-card</code> is the essential MCP server for a project's <strong>context</strong> (this file), <strong>memory</strong>, and <strong>identity</strong> — usable as your base MCP, or dropped into any existing MCP server as an extension. Discoverable to any MCP client through the two surfaces already in the ecosystem: the Server Card <code>_meta</code> block and <code>ai-catalog.json</code> sibling entries.</p>
228
228
  <p><code>read_agents_md</code> serves this file, section by section, over the same MCP connection.</p></div>
229
229
  <div class="ctx-body"><details class="ctx-section" id="setup"><summary>Setup</summary><div class="md"><pre><code class="language-bash">npm ci</code></pre>
230
- <p>Node 20 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
230
+ <p>Node 22 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
231
231
  npm run typecheck # tsc --noEmit over src/ + test/</code></pre></div></details><details class="ctx-section" id="test"><summary>Test</summary><div class="md"><pre><code class="language-bash">npm test # node:test — every test/*.test.ts
232
232
  npm run test:coverage # + the coverage gate (lines 90 / funcs 85 / branches 80, src/ only)
233
233
  npm run demo # end to end: all tools over stdio, then over stateless HTTP
package/docs/card.html CHANGED
@@ -205,7 +205,7 @@ details.ctx-section>.md{padding:0 0 16px}
205
205
  </details>
206
206
  <div class="id">
207
207
  <h1>mcp-context-card</h1>
208
- <p class="title">MCP server · v1.6.1</p>
208
+ <p class="title">MCP server · v1.7.0</p>
209
209
  <p class="oneliner">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity</p>
210
210
  </div>
211
211
  <div class="foot-front"><span class="domain">faf.one</span><div class="pills"><span class="pill">io.github.Wolfe-Jam</span><span class="pill accent">published</span><span class="pill">MIT</span></div></div>
@@ -223,11 +223,11 @@ details.ctx-section>.md{padding:0 0 16px}
223
223
  </div>
224
224
  </details>
225
225
  <div class="tabbar"><label for="t-about">About</label><label for="t-context">Context</label><label for="t-memory">Memory</label><label for="t-discovery">Discovery</label></div>
226
- <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.6.1</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
226
+ <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.7.0</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
227
227
  <div class="ctx-preamble md"><p><code>mcp-context-card</code> is the essential MCP server for a project's <strong>context</strong> (this file), <strong>memory</strong>, and <strong>identity</strong> — usable as your base MCP, or dropped into any existing MCP server as an extension. Discoverable to any MCP client through the two surfaces already in the ecosystem: the Server Card <code>_meta</code> block and <code>ai-catalog.json</code> sibling entries.</p>
228
228
  <p><code>read_agents_md</code> serves this file, section by section, over the same MCP connection.</p></div>
229
229
  <div class="ctx-body"><details class="ctx-section" id="setup"><summary>Setup</summary><div class="md"><pre><code class="language-bash">npm ci</code></pre>
230
- <p>Node 20 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
230
+ <p>Node 22 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
231
231
  npm run typecheck # tsc --noEmit over src/ + test/</code></pre></div></details><details class="ctx-section" id="test"><summary>Test</summary><div class="md"><pre><code class="language-bash">npm test # node:test — every test/*.test.ts
232
232
  npm run test:coverage # + the coverage gate (lines 90 / funcs 85 / branches 80, src/ only)
233
233
  npm run demo # end to end: all tools over stdio, then over stateless HTTP
Binary file
Binary file
Binary file
package/docs/index.html CHANGED
@@ -205,7 +205,7 @@ details.ctx-section>.md{padding:0 0 16px}
205
205
  </details>
206
206
  <div class="id">
207
207
  <h1>mcp-context-card</h1>
208
- <p class="title">MCP server · v1.6.1</p>
208
+ <p class="title">MCP server · v1.7.0</p>
209
209
  <p class="oneliner">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity</p>
210
210
  </div>
211
211
  <div class="foot-front"><span class="domain">faf.one</span><div class="pills"><span class="pill">io.github.Wolfe-Jam</span><span class="pill accent">published</span><span class="pill">MIT</span></div></div>
@@ -223,11 +223,11 @@ details.ctx-section>.md{padding:0 0 16px}
223
223
  </div>
224
224
  </details>
225
225
  <div class="tabbar"><label for="t-about">About</label><label for="t-context">Context</label><label for="t-memory">Memory</label><label for="t-discovery">Discovery</label></div>
226
- <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.6.1</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
226
+ <div class="panes"><div class="pane p-about"><p class="label">About</p><p class="lead">The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server, discoverable through the Server Card _meta block and a self-published ai-catalog.json.</p><table class="kv"><tbody><tr><th>Agent ID</th><td><code>urn:air:faf.one:agent:mcp-context-card</code></td></tr><tr><th>Publisher</th><td>io.github.Wolfe-Jam</td></tr><tr><th>Version</th><td>v1.7.0</td></tr><tr><th>Status</th><td>published</td></tr><tr><th>License</th><td>MIT</td></tr><tr><th>Package (npm)</th><td><code>mcp-context-card</code></td></tr></tbody></table></div><div class="pane p-context"><p class="label">Context — AGENTS.md</p><div class="ctx-nav"><ul class="toc"><li><a href="#setup">Setup</a></li><li><a href="#build">Build</a></li><li><a href="#test">Test</a></li><li><a href="#layout">Layout</a></li><li><a href="#conventions">Conventions</a></li><li><a href="#the-invariant">The invariant</a></li><li><a href="#safety">Safety</a></li><li><a href="#definition-of-done">Definition of done</a></li><li><a href="#authoring-this-file">Authoring this file</a></li></ul><button type="button" class="xall" hidden>Expand all</button></div>
227
227
  <div class="ctx-preamble md"><p><code>mcp-context-card</code> is the essential MCP server for a project's <strong>context</strong> (this file), <strong>memory</strong>, and <strong>identity</strong> — usable as your base MCP, or dropped into any existing MCP server as an extension. Discoverable to any MCP client through the two surfaces already in the ecosystem: the Server Card <code>_meta</code> block and <code>ai-catalog.json</code> sibling entries.</p>
228
228
  <p><code>read_agents_md</code> serves this file, section by section, over the same MCP connection.</p></div>
229
229
  <div class="ctx-body"><details class="ctx-section" id="setup"><summary>Setup</summary><div class="md"><pre><code class="language-bash">npm ci</code></pre>
230
- <p>Node 20 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
230
+ <p>Node 22 or newer. No other system dependencies.</p></div></details><details class="ctx-section" id="build"><summary>Build</summary><div class="md"><pre><code class="language-bash">npm run build # tsc -p tsconfig.build.json → dist/
231
231
  npm run typecheck # tsc --noEmit over src/ + test/</code></pre></div></details><details class="ctx-section" id="test"><summary>Test</summary><div class="md"><pre><code class="language-bash">npm test # node:test — every test/*.test.ts
232
232
  npm run test:coverage # + the coverage gate (lines 90 / funcs 85 / branches 80, src/ only)
233
233
  npm run demo # end to end: all tools over stdio, then over stateless HTTP
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-context-card",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "mcpName": "io.github.Wolfe-Jam/mcp-context-card",
5
5
  "description": "The essential MCP components for a project's context (AGENTS.md), cross-session memory, and identity — a base MCP on its own, or a drop-in extension for any existing MCP server. Discoverable through the Server Card _meta block and ai-catalog.json sibling entries.",
6
6
  "keywords": [
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.Wolfe-Jam/mcp-context-card",
4
4
  "title": "MCP Context Card",
5
5
  "description": "MCP server for a project's context (AGENTS.md), memory, and identity — base or drop-in extension.",
6
- "version": "1.6.1",
6
+ "version": "1.7.0",
7
7
  "repository": {
8
8
  "url": "https://github.com/Wolfe-Jam/mcp-context-card",
9
9
  "source": "github"
@@ -14,7 +14,7 @@
14
14
  "registryType": "npm",
15
15
  "registryBaseUrl": "https://registry.npmjs.org",
16
16
  "identifier": "mcp-context-card",
17
- "version": "1.6.1",
17
+ "version": "1.7.0",
18
18
  "runtimeHint": "npx",
19
19
  "transport": {
20
20
  "type": "stdio"