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.
- package/.well-known/ai-catalog.json +1 -1
- package/.well-known/fafa +6 -6
- package/CHANGELOG.md +27 -1
- package/dist/bin.d.ts +9 -5
- package/dist/bin.js +46 -6
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/faf/parse-fafm.js +22 -1
- package/dist/transport/http.js +3 -3
- package/docs/MECHANISMS.md +1 -1
- package/docs/TRANSPORT.md +3 -3
- package/docs/WIRING.md +11 -1
- package/docs/card.html +2 -2
- package/docs/img/card.png +0 -0
- package/package.json +3 -3
- package/project.fafm +4 -4
- package/server.json +4 -4
|
@@ -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": "
|
|
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: "
|
|
12
|
-
version: "0.5.
|
|
11
|
+
vendor: "io.github.wolfe-jam"
|
|
12
|
+
version: "0.5.1"
|
|
13
13
|
description: >-
|
|
14
|
-
|
|
15
|
-
and identity discoverable to any MCP client, through the Server
|
|
16
|
-
block and a self-published ai-catalog.json.
|
|
17
|
-
status: "
|
|
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
|
|
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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
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 === "
|
|
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(
|
|
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
|
}
|
package/dist/constants.d.ts
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 declare const NAME = "mcp-context-card";
|
|
4
|
-
export declare const VERSION = "0.5.
|
|
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.
|
|
4
|
+
export const VERSION = "0.5.1";
|
|
5
5
|
export const SERVER_CARD_URI = "mcp-context-card://server-card";
|
package/dist/faf/parse-fafm.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/transport/http.js
CHANGED
|
@@ -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
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
*
|
package/docs/MECHANISMS.md
CHANGED
|
@@ -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
|
|
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 (
|
|
85
|
-
|
|
86
|
-
|
|
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: {
|
|
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.
|
|
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
|
|
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.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"mcpName": "io.github.wolfe-jam/mcp-context-card",
|
|
5
|
-
"description": "
|
|
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": "
|
|
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
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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": "
|
|
6
|
-
"version": "0.5.
|
|
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.
|
|
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
|
|
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
|
]
|