Noyalib MCP README

The full upstream README, mirrored for reference. Install config, tool schemas, adoption signals and our own overview live on the Noyalib MCP listing page.

noyalib-mcp logo

noyalib-mcp

Model Context Protocol server for lossless YAML inspection, editing, and validation.

Build Registry Docs OpenSSF Scorecard License: Apache-2.0 OR MIT MSRV 1.89.0 Glama MCP server score

noyalib-mcp Demo


Contents

Getting started

The noyalib-mcp ecosystem

Library reference

Operational


Install

As a Rust library

toml
[dependencies]
noyalib-mcp = "0.0.58"

Install or run the server through the channel that fits the host:

bash
cargo install noyalib-mcp --locked
docker run --rm -i ghcr.io/sebastienrousseau/noyalib-mcp:latest

The npm wrapper (npx @sebastienrousseau/noyalib-mcp) runs a binary only when its package carries a SHA-256 for your platform. Releases do not yet publish per-platform archives, so today it refuses to run and points to the two commands above.

Requirements

  • Rust 1.89.0 or newer when building from source.
  • Linux, macOS, and Windows are tested by CI.
  • The crate pins noyalib at exactly =0.0.58 under the lockstep contract.
  • An MCP client is required to drive the server.
SurfaceMinimum toolchainEnforcement
Server and libraryRust 1.89.0manifest and MSRV CI
Complete test surfaceRust 1.89.0all-target CI

Quick Start

Use stdio for a child-process integration:

bash
noyalib-mcp

A stdio client begins with an MCP initialization request before sending the initialized notification or listing tools:

config.json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {},
    "clientInfo": {
      "name": "example",
      "version": "0.0.1"
    }
  }
}

Serve streamable HTTP at /mcp, or the legacy HTTP+SSE bridge at /sse and /messages/:

bash
noyalib-mcp --transport streamable-http --host 127.0.0.1 --port 8000
noyalib-mcp --transport sse --host 127.0.0.1 --port 8001

The server negotiates supported MCP revisions during initialize; clients should not send raw tool calls before completing that handshake.

The noyalib-mcp ecosystem

ComponentRole
noyalib-mcpMCP server, transports, tools, prompts, and resources
noyalibYAML parser, CST editor, and schema validator
noya-cliHuman-facing formatting and validation commands
rmcpOfficial Rust MCP SDK used for protocol handling

Capabilities at a glance

AreaCapabilityStatus
Transportstdio, streamable HTTP, and HTTP+SSESupported
ProtocolRevisions from 2024-11-05 through 2026-07-28Negotiated
ResultsText plus typed structuredContentSupported
YAMLParse, get, set, multidocument set, edit, and validateSupported
MetadataTool schemas, annotations, examples, prompts, and resourcesPublished

Ecosystem comparison

Delivery surfaceLossless YAML editsRemote transportTyped tool results
noyalib-mcpYesHTTP and SSEYes
noya-cliYesNoNot applicable
noyalibYesNoNative Rust types

See docs/COMPARISON.md for scope and evidence.

Benchmarks

The checked-in mcp_tools Criterion harness measures tool dispatch and YAML operations without treating noisy timing values as correctness gates.

bash
cargo bench --bench mcp_tools

See docs/BENCHMARKS.md for methodology.

Features

  • Six typed tools for YAML reads, edits, parsing, and validation.
  • Declared outputSchema, structuredContent, annotations, and examples.
  • stdio, streamable HTTP, and legacy HTTP+SSE transports.
  • Prompts and resources for agent integration.
  • Protocol revision negotiation and session-aware routing.

Configuration

OptionEffect
--transport stdioUse process stdin and stdout; this is the default
--transport streamable-httpServe MCP at /mcp
--transport sseServe /sse and /messages/
--host ADDRESSBind an HTTP transport to an address
--port PORTSelect the HTTP listening port
--root DIRConfine the file tools to DIR (default: the working directory, which may not be / or the home directory)
--profile strict|standardRules every tool parses under, the file tools and noyalib_edit included: noyalib's strict YAML 1.2 profile (the default: duplicate keys and odd indentation are errors, tighter limits) or the library defaults
--max-sessions NSessions an HTTP transport holds at once (default 64)

Bind remote transports deliberately. The default loopback host avoids exposing the server beyond the local machine. The file tools (noyalib_get, noyalib_set, noyalib_set_multidoc) refuse any path that resolves outside the root, symlinks included; start the server with --root on the directory a client may touch. The HTTP transports refuse a foreign Host or Origin and do not authenticate. SECURITY.md has the full trust model.

Examples

Client configuration recipes are in docs/agent-integration.md.

When not to use noyalib-mcp

  • Use noyalib directly inside a Rust application that does not need MCP.
  • Use noya-cli for shell pipelines and repository-wide validation.
  • Do not expose an HTTP transport to an untrusted network without an authentication and authorization layer in front of it.
  • The server does not fetch remote schemas; callers must supply trusted schema content.

The detailed README reference retains client setup, tool detail, verification steps, and conformance discussion.

Development

bash
make
make test
make clippy
make fmt
cargo fuzz run fuzz_tool_call

CI checks Rust formatting, linting, tests, documentation, dependency policy, fuzz regressions, protocol behaviour, and the shared YAML test suite. See DEVELOPMENT.md.

Security

Report vulnerabilities through SECURITY.md. The crate forbids unsafe code, audits dependencies, uses bounded noyalib operations, and emits release attestations and SBOMs. Treat file content, YAML, schemas, and MCP metadata as untrusted input.

Documentation

Stability guarantees

  • During 0.0.x, the patch component is the breaking-change axis.
  • Tool names, argument schemas, output schemas, and transport routes form the public compatibility surface.
  • Protocol revisions are negotiated rather than inferred.
  • The MSRV may rise only on the breaking axis with a changelog explanation.

License

Dual-licensed under either the Apache License, Version 2.0 or the MIT License, at your option.