rust-faf-mcp 0.5.0 → 0.6.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.
Files changed (2) hide show
  1. package/README.md +11 -10
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
  **Persistent Project Context for Rust MCP clients. Native. Fast. cargo install**
8
8
 
9
- **The Mk4 Truth Edition (v0.5.0)** — `one.faf/rust-faf-mcp` · **rmcp 3.0.1** (MCP Tier 1 foundation) · **faf-rust-sdk 3.0** (the same always-33 kernel `faf-wasm-sdk` uses) · solid cargo-native Rust MCP for Rust devs
9
+ **The AGENTS.md Edition (v0.6.0)** — `one.faf/rust-faf-mcp` · **rmcp 3.0.1** (MCP Tier 1 foundation) · **faf-rust-sdk 3.1** (the same always-33 kernel `faf-wasm-sdk` uses) · solid cargo-native Rust MCP for Rust devs
10
10
 
11
- **v0.5.0** — the public score is now the real Mk4 kernel score, not a separate legacy completeness heuristic. `faf-rust-sdk` pin caught up from `1.3` to `3`. Note: `faf-cli`'s default `faf score` currently runs a different, 21-slot base kernel (`faf-scoring-kernel`'s `score_faf`)that convergence is separate, tracked FAF 6.0 work, not part of this release. See [CHANGELOG](./CHANGELOG.md#050---2026-08-26).
11
+ **v0.6.0** — adds `faf_agents`, a 10th tool: generates `AGENTS.md` from `project.faf`, non-destructively (preserves any hand-written content outside the faf-managed block). Ported line-for-line from `faf-cli`'s `generateAgentsMd()` — byte-for-byte parity is deliberate, so this MCP stays backward-compatible with any `faf-cli` output as it evolves. See [CHANGELOG](./CHANGELOG.md#060---2026-08-26--the-agentsmd-edition).
12
12
 
13
13
  **FAF defines. MD instructs. AI codes.**
14
14
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  [![Crates.io](https://img.shields.io/crates/v/rust-faf-mcp?style=flat-square)](https://crates.io/crates/rust-faf-mcp)
18
18
  [![FAF Trophy 100%](https://img.shields.io/badge/FAF-%E2%9C%AA%20100%25-000000?labelColor=FF6B35)](https://faf.one)
19
- [![Tests](https://img.shields.io/badge/tests-118%20passing-brightgreen?style=flat-square)](https://github.com/Wolfe-Jam/rust-faf-mcp)
19
+ [![Tests](https://img.shields.io/badge/tests-133%20passing-brightgreen?style=flat-square)](https://github.com/Wolfe-Jam/rust-faf-mcp)
20
20
  [![IANA](https://img.shields.io/badge/IANA-registered-informational?style=flat-square)](https://www.iana.org/assignments/media-types/application/vnd.faf+yaml)
21
21
  [![License](https://img.shields.io/crates/l/rust-faf-mcp?style=flat-square)](LICENSE)
22
22
 
@@ -120,6 +120,7 @@ Every AI agent reads this once and knows exactly what you're building. No 20-min
120
120
  |------|-------------|
121
121
  | `faf_score` | Score AI-readiness 0-100% with field-level breakdown |
122
122
  | `faf_sync` | Sync `project.faf` → `CLAUDE.md` (preserves existing content) |
123
+ | `faf_agents` | Generate `AGENTS.md` from `project.faf` (non-destructive, preserves hand-written content) |
123
124
 
124
125
  ### Optimize
125
126
 
@@ -137,22 +138,22 @@ Every AI agent reads this once and knows exactly what you're building. No 20-min
137
138
  src/
138
139
  ├── main.rs # ~20 lines — tokio entry, rmcp stdio transport
139
140
  ├── server.rs # FafServer: #[tool_router], ServerHandler, resources
140
- └── tools.rs # Business logic — all 9 tools, pure functions returning Value
141
+ └── tools.rs # Business logic — all 10 tools, pure functions returning Value
141
142
  ```
142
143
 
143
144
  - **Runtime**: `tokio` single-threaded (`current_thread`)
144
145
  - **HTTP**: `reqwest` async (only used by `faf_git` for GitHub API)
145
- - **SDK**: `faf-rust-sdk` **3.0** (Cargo pin — the facade over `faf-kernel`/`faf-fafb` in [faf-rust](https://github.com/Wolfe-Jam/faf-rust); `score()` for the real Mk4 number, `validate()` for structural checks only)
146
+ - **SDK**: `faf-rust-sdk` **3.1** (Cargo pin — the facade over `faf-kernel`/`faf-fafb` in [faf-rust](https://github.com/Wolfe-Jam/faf-rust); `score()` for the real Mk4 number, `validate()` for structural checks only)
146
147
  - **Server**: **`rmcp` 3.0.1** with `#[tool_router]` / `#[tool_handler]` — JSON-RPC, schema generation, stdio transport (Tier-1 assessed SDK cut)
147
148
 
148
149
  Tools return `serde_json::Value`. The server adapts them to `Result<String, String>` for rmcp's `IntoCallToolResult`.
149
150
 
150
151
  ## Testing
151
152
 
152
- 118 tests (114 integration + 4 unit):
153
+ 133 tests (117 integration + 16 unit):
153
154
 
154
155
  ```bash
155
- cargo test # runs all 118
156
+ cargo test # runs all 133
156
157
 
157
158
  # Full ship bar (same gates as GitHub CI — run before push)
158
159
  bash scripts/ci.sh
@@ -163,12 +164,12 @@ bash scripts/install-hooks.sh
163
164
  | File | Tests | Coverage |
164
165
  |------|-------|----------|
165
166
  | `mcp_protocol.rs` | 9 | Init handshake, tools/list, resources, schema validation, ID preservation |
166
- | `tools_functional.rs` | 25 | All 9 tools — happy path, error paths, language detection |
167
+ | `tools_functional.rs` | 28 | All 10 tools — happy path, error paths, language detection |
167
168
  | `tier1_security.rs` | 12 | Path traversal, null bytes, shell injection, oversized input, malformed JSON |
168
- | `tier2_engine.rs` | 35 | Corrupt YAML, sync replacement, pipelines, dual manifests, legacy filenames, direct paths |
169
+ | `tier2_engine.rs` | 36 | Corrupt YAML, sync replacement, pipelines, dual manifests, legacy filenames, direct paths |
169
170
  | `tier3_edge_cases.rs` | 10 | Unicode, CJK, score boundaries, unknown fields, GitHub URL parsing |
170
171
  | `tier4_aero.rs` | 22 | Manifest structure, version sync, server.json, context block, manifest-server cross-validation |
171
- | `src` unit | 4 | Skills extension digest + scoring resource |
172
+ | `src` unit | 16 | Skills extension digest + scoring resource, `agents::` generator (7), `inject::` non-destructive write (5) |
172
173
 
173
174
  Tests spawn the compiled binary as a subprocess and communicate via stdin/stdout JSON-RPC — true integration tests against the real server.
174
175
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rust-faf-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "mcpName": "one.faf/rust-faf-mcp",
5
5
  "description": "Persistent project context — Rust-native MCP server. IANA-registered .faf format. npm shim downloads the native binary from GitHub Releases.",
6
6
  "license": "MIT",