noyalib-mcp
This server enables AI agents to perform lossless, surgical edits on YAML configuration files via the Model Context Protocol (MCP):
Read YAML values losslessly: Retrieve specific values at a dotted/indexed path without re-quoting or canonicalisation, preserving comments and formatting.
Write YAML values losslessly: Set a value at a specific path, rewriting only the touched byte span while preserving surrounding comments, blank lines, and sibling formatting. Writes are atomic, and the document is left unchanged on parse errors.
Contents
Install — Cargo, npx, Docker
Quick Start — JSON-RPC handshake
Why this approach? — design rationale
Connect — per-client configuration
Tools — MCP tool reference
Examples — runnable scripts
Verification — cosign + npm provenance
Related MCP server: mcp-json-yaml-toml
Install
cargo install noyalib-mcpFor environments without a Rust toolchain (the typical AI-agent deployment shape):
# npm wrapper — auto-downloads the matching binary on first run,
# caches under ~/.cache/noyalib-mcp/<version>/.
npx @sebastienrousseau/noyalib-mcp
# Container — multi-arch (linux/amd64, linux/arm64).
docker run --rm -i ghcr.io/sebastienrousseau/noyalib-mcp:latestSplit from the monorepo since v0.0.13. Prior versions shipped from
sebastienrousseau/noyalib/crates/noyalib-mcp/under the workspace-lockstep release cadence. From v0.0.13 onwardnoyalib-mcplives here as its own crate, still released in strict lockstep with the parentnoyalibat the same version. See ADR-0005 for the rationale and rollback recipe.
Both consume the same signed binary attached to every GitHub Release. See Verification for the verify commands.
Quick Start
The server speaks JSON-RPC 2.0 over stdio with newline-delimited
frames, per the
MCP specification. A typical
agent launches the binary as a child process, sends
initialize, then dispatches tool calls:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"agent","version":"0.0.1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"format","arguments":{"yaml":"a:1\nb:2\n"}}}Why this approach?
AI agents that edit YAML configuration today regex-replace and corrupt comments, indentation, and document structure. The same agent fixing a port number in a Kubernetes manifest can shift every comment by a line, reorder sibling keys, or strip trailing whitespace that a downstream linter cared about.
noyalib's CST does the edits losslessly — a set("server.port", "9090") rewrites only the byte span of the 8080 scalar; the
surrounding comments and indentation pass through untouched.
This server is the protocol shim that lets MCP-aware clients
drive that engine safely:
Lossless mutation.
tools/call setreturns a document byte-identical to the input outside the touched span.Surgical reads.
tools/call getwalks the dotted path and returns just the value, not the whole tree.Schema validation.
tools/call validate --schemaruns the same JSON Schema 2020-12 enginenoyavalidateships.Stdio transport. Standard MCP. Works with every spec-compliant client.
Connect
Claude Desktop / Claude Code
claude mcp add noyalib $(which noyalib-mcp)Cursor
~/.cursor/mcp.json:
{
"mcpServers": {
"noyalib": {
"command": "noyalib-mcp"
}
}
}Zed
~/.config/zed/settings.json:
{
"context_servers": {
"noyalib": {
"command": { "path": "noyalib-mcp" }
}
}
}Continue.dev
~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{ "transport": { "type": "stdio", "command": "noyalib-mcp" } }
]
}
}Any other MCP-aware client
Point at the binary; the transport is stdio with newline- delimited JSON-RPC 2.0.
Tools
The v0.0.1 server registers two file-oriented tools — both
operate on a YAML file at file: <path>, not on inline source
strings, so an agent's edits land on disk losslessly:
noyalib_get— Takes{ file: string, path: string }; returns the raw source fragment at the dotted/indexed path (e.g.server.host,items[0].name). No re-quoting; no canonicalisation.noyalib_set— Takes{ file: string, path: string, value: string }; returns the file rewritten via the lossless CST so only the touched span changes; comments, blank lines, and sibling formatting survive byte-for-byte. Thevalueis a YAML fragment (0.0.2,"hello",[1, 2, 3]); a parse failure leaves the file unchanged.
Each tool's full input schema lives in the response to
tools/list. The server also handles the standard
initialize / initialized / notifications/cancelled
lifecycle.
Format / parse / validate are not exposed as MCP tools today —
they're available via the noya-cli
binaries (noyafmt, noyavalidate) and the
noyalib library API. Promotion to
first-class MCP tools is on the v0.0.2+ roadmap.
Examples
Agent-driving demos under
crates/noyalib-mcp/examples/:
Script | What it shows |
| |
| |
Round-trip the mutation surface: |
chmod +x crates/noyalib-mcp/examples/*.sh
crates/noyalib-mcp/examples/handshake.sh | jq -c .POSIX-shell only — no jq, no node dependencies. Pipe
through jq -c . if you want pretty-printed JSON responses.
Verification
The npm wrapper and the GHCR image both consume the signed binary attached to every GitHub Release. To verify the underlying binary before trusting it:
COSIGN_EXPERIMENTAL=1 cosign verify-blob \
--certificate-identity-regexp 'https://github.com/sebastienrousseau/noyalib-mcp/' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--certificate <artefact>.pem \
--signature <artefact>.sig \
<artefact>The npm wrapper additionally carries an npm provenance attestation:
npm view noyalib-mcp provenanceFull cookbook: pkg/VERIFY.md.
When not to use noyalib-mcp
You don't trust your AI agent with filesystem access at all. noyalib-mcp doesn't read or write files itself — every operation takes the YAML document as a string argument and returns the result as a string. The agent decides what to do with the result. If the agent has filesystem access, it can persist the response wherever it wants.
You need a sandboxed schema registry. noyalib-mcp accepts schemas as inline strings in
tools/call validate; it does not fetch schemas from URLs. If your workflow needs network-resolved schemas, the agent is responsible for fetching the schema first and passing the bytes.
Compatibility
MSRV: Rust 1.86.0 stable — the lowest toolchain this crate
can be built and tested on, matching the noyalib core floor.
criterion 0.8 (the benchmark dev-dependency) declares
rust-version = 1.86, so cargo check --all-targets and the
bench suite fail on 1.85 with criterion@0.8.2 requires rustc 1.86 — cargo check --lib alone still builds on 1.85. We publish
the number we verify. The MCP wire surface itself is text-only
JSON-RPC and pulls no nightly-only deps. CI verifies the floor on every
PR via the Per-crate MSRV workflow job. The bump policy
lives in
doc/POLICIES.md.
Tier-1 platforms (CI-verified each PR): aarch64-apple-darwin,
x86_64-unknown-linux-gnu, x86_64-pc-windows-msvc. The
binary writes via atomic file replacement on every platform —
on Windows via MoveFileExW(MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH) semantics.
Documentation
Engineering policies (MSRV, SemVer, security, performance, concurrency, platform support, feature flags):
doc/POLICIES.mdSecurity policy:
SECURITY.mdAPI reference: https://docs.rs/noyalib-mcp
Tools reference (input schemas + error codes):
doc/tools-reference.mdAgent integration (Claude Desktop, Cursor, Continue.dev):
doc/agent-integration.mdMCP specification: https://modelcontextprotocol.io
Workspace README: https://github.com/sebastienrousseau/noyalib#readme
Related MCP Servers
Sibling MCP servers by the same author — open-source, Apache-2.0 licensed, targeting banking and financial-services AI agents. noyalib-mcp complements them by giving agents lossless YAML editing for structured configuration files:
Server | Purpose |
Generate & validate ISO 20022 pain.001 payment initiation files (Customer Credit Transfer) | |
Parse bank statements (BAI2, MT940/MT942, CAMT.053, OFX, CSV) into structured transactions | |
Parse & reconcile ISO 20022 camt.053 bank-to-customer statements — CBPR+/HVPS+ ready | |
Generate & validate ISO 20022 acmt.001 account management messages |
MCP Registry
mcp-name: io.github.sebastienrousseau/noyalib-mcp
License
Dual-licensed under Apache 2.0 or MIT, at your option.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- Alicense-qualityCmaintenanceA server for the Machine Chat Protocol (MCP) that provides a YAML-based configuration system for LLM applications, allowing users to define resources, tools, and prompts without writing code.Last updated5MIT
- AlicenseAqualityCmaintenanceA token-efficient, schema-aware MCP server that enables AI assistants to safely read, modify, query, and validate JSON, YAML, and TOML files with automatic schema detection and format conversion capabilities.Last updated89MIT
- Alicense-qualityAmaintenanceMCP server wrapping local Ollama models for offload from API-priced orchestrators. Nine stdio tools - generation, summarisation, analysis, drafting, code tasks (docstring/test/explain/review/types/refactor-suggest), diff-driven tasks (commit-message/pr-description/changelog/summary/impact), mechanical transforms, and model management (list/pull). Apache-2.0.Last updated13Apache 2.0
- AlicenseAqualityAmaintenanceDeterministic dependency + CVE context for AI coding tools, over the Model Context Protocol. A ~0.85 MB pure-Rust MCP server.Last updated21MIT
Related MCP Connectors
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sebastienrousseau/noyalib-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server