mcp-context-card 1.6.0 → 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.
- package/.well-known/ai-catalog.json +1 -1
- package/.well-known/fafa +3 -1
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +29 -0
- package/README.md +7 -4
- package/dist/bin.d.ts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/faf/parse-fafa.js +1 -0
- package/dist/faf/types.d.ts +2 -0
- package/dist/render-card.d.ts +15 -4
- package/dist/render-card.js +37 -9
- package/dist/server.js +1 -1
- package/docs/MECHANISMS.md +2 -2
- package/docs/card-dark.html +4 -4
- package/docs/card-light.html +4 -4
- package/docs/card.html +4 -4
- package/docs/img/card-dark.png +0 -0
- package/docs/img/card-identity.png +0 -0
- package/docs/img/card-light.png +0 -0
- package/docs/index.html +4 -4
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -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.
|
|
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.
|
|
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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,35 @@
|
|
|
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
|
+
|
|
24
|
+
## 1.6.1
|
|
25
|
+
|
|
26
|
+
The logo is the first letter.
|
|
27
|
+
|
|
28
|
+
- The card's monogram is now the first letter of the name, with a second
|
|
29
|
+
letter only when it's obvious ("GH" for GitHub, "TS" for TypeScript, or
|
|
30
|
+
the two capitals of a CamelCase name). Generic words such as "mcp",
|
|
31
|
+
"server" or "agent" are skipped, so mcp-context-card's logo is **C**,
|
|
32
|
+
not MC.
|
|
33
|
+
|
|
5
34
|
## 1.6.0
|
|
6
35
|
|
|
7
36
|
The card is a business card.
|
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
|
|
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
|
-
(
|
|
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 ≥
|
|
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
|
-
|
|
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.
|
|
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.
|
package/dist/constants.d.ts
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 declare const NAME = "mcp-context-card";
|
|
4
|
-
export declare const VERSION = "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.
|
|
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
|
package/dist/faf/parse-fafa.js
CHANGED
|
@@ -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
|
}
|
package/dist/faf/types.d.ts
CHANGED
package/dist/render-card.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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,14 +21,20 @@ 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)
|
|
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
|
-
|
|
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. */
|
|
27
31
|
export declare function cardTitle(id: AgentIdentity | null): string;
|
|
28
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* The front's logo: the first letter of the name's first meaningful word
|
|
34
|
+
* (generic words like "mcp", "server", "sdk" skipped), plus a second letter
|
|
35
|
+
* only when it's obvious: a known name (github → GH, typescript → TS) or a
|
|
36
|
+
* word written with two capitals (GitHub, TypeScript). Never more than two.
|
|
37
|
+
*/
|
|
29
38
|
export declare function cardInitials(name: string): string;
|
|
30
39
|
/** The front's one-liner: the first sentence of the description. */
|
|
31
40
|
export declare function cardOneLiner(id: AgentIdentity | null, max?: number): string;
|
|
@@ -56,6 +65,8 @@ export interface BusinessCard {
|
|
|
56
65
|
}[];
|
|
57
66
|
/** The (i) panel, as already-safe markup. */
|
|
58
67
|
about: string;
|
|
68
|
+
/** The owner's colour, a hex. None = ink (black or white). */
|
|
69
|
+
accent?: string;
|
|
59
70
|
}
|
|
60
71
|
/** How to draw a card: the owner's colour and accent, the view, and the flat (print) layout. */
|
|
61
72
|
export type RenderOptions = Pick<CardOptions, "theme" | "accent" | "layout" | "expanded">;
|
package/dist/render-card.js
CHANGED
|
@@ -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)
|
|
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 :
|
|
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
|
-
|
|
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){
|
|
@@ -217,12 +230,26 @@ export function cardTitle(id) {
|
|
|
217
230
|
return [cardKind(id).join(" · "), id?.agentVersion ? `v${id.agentVersion}` : ""].filter(Boolean).join(" · ");
|
|
218
231
|
}
|
|
219
232
|
/** The front's logo: the first letters of the name's first two words ("mcp-context-card" → "MC"). */
|
|
233
|
+
/** Words that say what kind of thing it is, not whose: never the logo ("mcp-context-card" → C, not M). */
|
|
234
|
+
const GENERIC_WORDS = new Set(["mcp", "server", "servers", "sdk", "agent", "agents", "api", "cli", "app", "tool", "tools", "plugin", "core", "the"]);
|
|
235
|
+
/** Names whose two-letter mark is obvious. */
|
|
236
|
+
const OBVIOUS_MARKS = { github: "GH", gitlab: "GL", typescript: "TS", javascript: "JS" };
|
|
237
|
+
/**
|
|
238
|
+
* The front's logo: the first letter of the name's first meaningful word
|
|
239
|
+
* (generic words like "mcp", "server", "sdk" skipped), plus a second letter
|
|
240
|
+
* only when it's obvious: a known name (github → GH, typescript → TS) or a
|
|
241
|
+
* word written with two capitals (GitHub, TypeScript). Never more than two.
|
|
242
|
+
*/
|
|
220
243
|
export function cardInitials(name) {
|
|
221
244
|
const words = name.split(/[^\p{L}\p{N}]+/u).filter(Boolean);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
245
|
+
const first = words.find((w) => !GENERIC_WORDS.has(w.toLowerCase())) ?? words[0] ?? "";
|
|
246
|
+
const known = OBVIOUS_MARKS[first.toLowerCase()];
|
|
247
|
+
if (known)
|
|
248
|
+
return known;
|
|
249
|
+
const capitals = first.match(/\p{Lu}/gu) ?? [];
|
|
250
|
+
if (capitals.length === 2 && /^\p{Lu}/u.test(first) && /\p{Ll}/u.test(first))
|
|
251
|
+
return capitals.join("");
|
|
252
|
+
return (Array.from(first)[0] ?? "").toUpperCase();
|
|
226
253
|
}
|
|
227
254
|
/** The front's one-liner: the first sentence of the description. */
|
|
228
255
|
export function cardOneLiner(id, max = 140) {
|
|
@@ -354,12 +381,13 @@ export function readCard(root, opts = {}) {
|
|
|
354
381
|
chips,
|
|
355
382
|
tabs: tabs.map(([key, label, heading, html]) => ({ key, label, heading, html })),
|
|
356
383
|
about: AGENT_ABOUT,
|
|
384
|
+
...(id?.accent ? { accent: id.accent } : {}),
|
|
357
385
|
};
|
|
358
386
|
}
|
|
359
387
|
/** Draw any business card as one self-contained HTML page. */
|
|
360
388
|
export function renderBusinessCard(card, opts = {}) {
|
|
361
389
|
const theme = opts.theme ?? "auto";
|
|
362
|
-
const accent = safeAccent(opts.accent);
|
|
390
|
+
const accent = safeAccent(opts.accent) ?? safeAccent(card.accent);
|
|
363
391
|
const portrait = opts.layout === "portrait";
|
|
364
392
|
const flat = !!opts.expanded;
|
|
365
393
|
const { name, title, oneLiner, domain } = card;
|
|
@@ -391,7 +419,7 @@ export function renderBusinessCard(card, opts = {}) {
|
|
|
391
419
|
<meta charset="utf-8">
|
|
392
420
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
393
421
|
<title>${escapeHtml(name)} — business card</title>
|
|
394
|
-
<style>${CSS(accent)}${tabCss}</style>
|
|
422
|
+
<style>${CSS(accent)}${accent ? "" : INK_CSS}${tabCss}</style>
|
|
395
423
|
</head>
|
|
396
424
|
<body${flat ? ` class="flat"` : ""}${htmlAttr(theme)}>
|
|
397
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. #
|
|
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
|
};
|
package/docs/MECHANISMS.md
CHANGED
|
@@ -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.
|
|
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.
|
|
88
|
+
Served from `https://ctx.example.com` (1.7.0, this repo's own files):
|
|
89
89
|
|
|
90
90
|
```jsonc
|
|
91
91
|
{
|
package/docs/card-dark.html
CHANGED
|
@@ -193,7 +193,7 @@ details.ctx-section>.md{padding:0 0 16px}
|
|
|
193
193
|
<main class="bcard">
|
|
194
194
|
<div class="faces">
|
|
195
195
|
<section class="face front">
|
|
196
|
-
<div class="logo" aria-hidden="true">
|
|
196
|
+
<div class="logo" aria-hidden="true">C</div>
|
|
197
197
|
<details class="whatis">
|
|
198
198
|
<summary class="corner tr" title="About this card" aria-label="About this card">i</summary>
|
|
199
199
|
<div class="whatis-panel">
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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-light.html
CHANGED
|
@@ -193,7 +193,7 @@ details.ctx-section>.md{padding:0 0 16px}
|
|
|
193
193
|
<main class="bcard">
|
|
194
194
|
<div class="faces">
|
|
195
195
|
<section class="face front">
|
|
196
|
-
<div class="logo" aria-hidden="true">
|
|
196
|
+
<div class="logo" aria-hidden="true">C</div>
|
|
197
197
|
<details class="whatis">
|
|
198
198
|
<summary class="corner tr" title="About this card" aria-label="About this card">i</summary>
|
|
199
199
|
<div class="whatis-panel">
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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
|
@@ -193,7 +193,7 @@ details.ctx-section>.md{padding:0 0 16px}
|
|
|
193
193
|
<main class="bcard">
|
|
194
194
|
<div class="faces">
|
|
195
195
|
<section class="face front">
|
|
196
|
-
<div class="logo" aria-hidden="true">
|
|
196
|
+
<div class="logo" aria-hidden="true">C</div>
|
|
197
197
|
<details class="whatis">
|
|
198
198
|
<summary class="corner tr" title="About this card" aria-label="About this card">i</summary>
|
|
199
199
|
<div class="whatis-panel">
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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/img/card-dark.png
CHANGED
|
Binary file
|
|
Binary file
|
package/docs/img/card-light.png
CHANGED
|
Binary file
|
package/docs/index.html
CHANGED
|
@@ -193,7 +193,7 @@ details.ctx-section>.md{padding:0 0 16px}
|
|
|
193
193
|
<main class="bcard">
|
|
194
194
|
<div class="faces">
|
|
195
195
|
<section class="face front">
|
|
196
|
-
<div class="logo" aria-hidden="true">
|
|
196
|
+
<div class="logo" aria-hidden="true">C</div>
|
|
197
197
|
<details class="whatis">
|
|
198
198
|
<summary class="corner tr" title="About this card" aria-label="About this card">i</summary>
|
|
199
199
|
<div class="whatis-panel">
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
+
"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.
|
|
17
|
+
"version": "1.7.0",
|
|
18
18
|
"runtimeHint": "npx",
|
|
19
19
|
"transport": {
|
|
20
20
|
"type": "stdio"
|