oxml-mcp
What it does
XML tools for agents: XPath queries, inspection, and schema validation in Rust.
- Connects パソコンで動く
- Account or key No key needed
- Category 開発者ツール
インストール
使っているAIアプリを選んで、設定をコピーしてください。
チェック 3/3 合格 · あなたのパソコンで動きます
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
Claude につなげますが、先に準備が必要です
先にパソコンへ Docker を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
パソコン版 Claude アプリの設定ファイルを開く
SettingsDeveloperEdit Config
この設定を貼り付けて保存
{ "mcpServers": { "oxml": { "command": "docker", "args": [ "run", "-i", "--rm", "ghcr.io/sebastienrousseau/oxml-mcp:0.0.16" ] } } }Claude を終了してもう一度開く
試してみる
oxml-mcp を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が oxml-mcp を使っていると言うか、回答に oxml-mcp のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ oxml-mcp につなげません
oxml-mcp はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
代わりにできること
A · oxml-mcp につなげるアプリを使う
- 先にパソコンへ Docker を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
- 先にパソコンへ Docker を入れてください(1 回だけ)
- 先にパソコンへ Docker を入れてください(1 回だけ)
- 先にパソコンへ Docker を入れてください(1 回だけ)
B · 開発者ツール の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
- Sentry✓ ChatGPT
- Compiler Explorer✓ ChatGPT
- GitDiagram✓ ChatGPT
Claude Code につなげますが、先に準備が必要です
先にパソコンへ Docker を入れてください(1 回だけ)
ターミナルを開く
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
このコマンドを貼り付けて Enter
claude mcp add --scope user oxml -- docker run -i --rm ghcr.io/sebastienrousseau/oxml-mcp:0.0.16Claude Code で /mcp と入力
oxml-mcp が一覧にあり、接続済みと表示されれば OK です
試してみる
oxml-mcp を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が oxml-mcp を使っていると言うか、回答に oxml-mcp のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
先にパソコンへ Docker を入れてください(1 回だけ)
Cursor の AI チャットを Agent モードで開く
試してみる
oxml-mcp を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が oxml-mcp を使っていると言うか、回答に oxml-mcp のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
先にパソコンへ Docker を入れてください(1 回だけ)
VS Code の AI チャットを Agent モードで開く
試してみる
oxml-mcp を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が oxml-mcp を使っていると言うか、回答に oxml-mcp のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
開発者向け:ターミナルのコマンドと JSON 設定
パソコンにインストール
Claude Code
claude mcp add --scope user oxml -- docker run -i --rm ghcr.io/sebastienrousseau/oxml-mcp:0.0.16Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"oxml": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/sebastienrousseau/oxml-mcp:0.0.16"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"oxml": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/sebastienrousseau/oxml-mcp:0.0.16"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"oxml": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/sebastienrousseau/oxml-mcp:0.0.16"
]
}
}
}この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
ひと目でわかる
使えるアプリ
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
できること
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月12日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント sebastienrousseau で確認済みです
- ✓ 合格
今もメンテナンスされている
コードの最終更新:4 日前
- ✓ 合格
ライセンスがある
Apache-2.0を使用
- – 対象外
エンドポイントが応答する
これはパソコンで動くため、インターネット上のエンドポイントはありません
- – 対象外
OAuthでサインイン
パソコンで動き、代わりにローカルの設定を使います
- … 未チェック
ツールの説明に隠れた指示がない
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
話し合い
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
ユーザーレビュー
まだレビューはありません
開発者ツールのほかのサーバーとの比較i
- このカテゴリのほかの5793件のうち0%よりスターが多い
- このカテゴリのほかの5793件のうち76%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの5793件のうち100%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
oxml-mcpは安全ですか?
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
パソコンで動きますか、それともクラウドですか?
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は4 日前、最新バージョン(0.0.16)がレジストリに届いたのは5 日前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにDockerも必要です。
代わりに使えるものは?
同じカテゴリには:REA, GitHub, Serena MCP: the IDE for your agent
同じカテゴリのほかの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Serena MCP: the IDE for your agent
A powerful toolkit for coding, providing semantic retrieval and editing capabilities.
作者のREADME
READMEを開く
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
oxml-mcp
A Model Context Protocol server that lets a model query XML instead of reading it — powered by oxml , with zero unsafe code.
Contents
Getting started
- Why a model wants this — the problem an XML tool solves for an LLM
- Install — Cargo, from source
- Transports — stdio, streamable HTTP, SSE
- Quick Start — three lines, no client required
- Configure — Claude Desktop, and any MCP client
The oxml ecosystem
- The oxml ecosystem — seven crates, one version
Reference
- Tools —
xml_query,xml_validate,xml_check,xml_inspect,xml_format - Protocol — MCP
2025-11-25and2026-07-28, and the two kinds of failure - Errors — the two kinds, and which is which
- Design — why five tools, and why documents are strings
- Capabilities in 0.0.16 — release inventory
- Ecosystem comparison — how this compares to the alternatives
- Benchmarks — latency per request, measured in pairs
Practical
- Examples — a full session, and every error path
- When not to use oxml-mcp
- FAQ
- Development
- Security
- Roadmap
- Documentation
- Acknowledgements
- License
Why a model wants this
A client can supply XML directly as a tool argument and put only the selected results into a model prompt. count(//record) returns a count computed by the parser rather than an estimate from a pasted fragment.
The server accepts XML strings up to its strict 8 MiB source limit; it does not open paths or fetch URLs. A model constructing the complete tool argument itself still needs the XML text. The HTTP transport has its own, tighter SDK request-body limit.
The secondary argument is arithmetic. A model asked to count elements in a document it can see will approximate. xml_query with count(//record) will not.
Install
cargo install oxml-mcp --version 0.0.16 --locked
Without a Rust toolchain, the same binary ships as an image on GHCR (the MCP registry entry points at it):
docker run --rm -i ghcr.io/sebastienrousseau/oxml-mcp:0.0.16
Transports
One binary, three ways to reach it. Every server in the suite takes the same flags.
| Command | Transport | Endpoint | Protocol revisions |
|---|---|---|---|
oxml-mcp | stdio | stdin and stdout | 2024-11-05 to 2026-07-28 |
oxml-mcp --transport streamable-http --host 127.0.0.1 --port 8000 | Streamable HTTP | http://127.0.0.1:8000/mcp | 2025-11-25 and 2026-07-28 |
oxml-mcp --transport sse --port 8001 | HTTP+SSE (legacy) | http://127.0.0.1:8001/sse, /messages/ | 2024-11-05 |
Streamable HTTP serves both current revisions on the one endpoint: a client that sends initialize gets a session and an Mcp-Session-Id; a client that names 2026-07-28 in each request's _meta is served statelessly, with server/discover in place of the handshake. Responses stream as server-sent events, and GET /mcp opens the server-to-client stream. The SSE transport is the older one, for hosts that still expect an endpoint event and a message URL.
The HTTP transports bind the loopback interface unless --host says otherwise, and they do not authenticate. Put the server behind a gateway you trust before binding a routable address. They refuse a foreign Host or a non-local Origin with 403, and --max-sessions (64 by default) caps how many sessions they hold at once; see doc/PROTOCOL.md. --version and --help do what they say.
Quick Start
The server speaks JSON-RPC 2.0 over stdio, so three lines are enough to see it work — the handshake, then a call — and no client is required:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"me","version":"0"}}}' \ '{"jsonrpc":"2.0","method":"notifications/initialized"}' \ '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"xml_query","arguments":{"xml":" Dune ","xpath":"//title"}}}' \ | oxml-mcp | tail -n 1
{"jsonrpc":"2.0","id":2,"result":{"resultType":"complete","content":[{"type":"text","text":"Dune"}],"structuredContent":{"count":1,"values":["Dune"]},"isError":false}}
For day-to-day use you want a client to do that for you — see Configure.
Configure
Add it to your MCP client's server list. For Claude Desktop, in claude_desktop_config.json:
{
"mcpServers": { "oxml": { "command": "oxml-mcp" } } }
For Claude Code:
claude mcp add oxml -- oxml-mcp
Without arguments the server speaks JSON-RPC 2.0 over stdin and stdout, one message per line, which is what these clients expect. A client that connects over HTTP instead points at a server started with --transport streamable-http — see Transports. There is no configuration file.
The oxml ecosystem
| Crate | What it is |
|---|---|
oxml | The library: parser, tree, XPath 1.0 |
xmlschema | XSD validation |
oxml-cli | The command line |
oxml-wasm | WebAssembly bindings |
| `oxml-mcp` | This crate — MCP server |
oxml-lsp | Language Server Protocol server |
oxml-json | JSON support for the language server |
All seven ship one version number, in steps of 0.0.1.
Tools
xml_query
Evaluate an XPath 1.0 expression and return the matching values.
| Argument | Type | |
|---|---|---|
xml | string | The document |
xpath | string | An XPath 1.0 expression |
namespaces | object | Optional. Prefix-to-URI bindings for the expression |
{"name":"xml_query","arguments":{"xml":"<r><t>Dune</t><t>Germinal</t></r>","xpath":"//t"}}
Dune
Germinal
One value per line. Expressions returning a number, string or boolean return that value directly, so count(//t) gives 2. Every tool also returns its answer as structuredContent, against the outputSchema it advertises — here {"count": 2, "values": ["Dune", "Germinal"]}.
xml_inspect
Summarise a document's shape: root element, maximum depth, every element name with its count, and the namespaces it uses.
{"name":"xml_inspect","arguments":{"xml":"<r><t>x</t></r>"}}
Root element: r
Maximum depth: 3 Elements: r: 1 t: 1
Call this first. A model that knows the element names can write a query that works; one that guesses writes //item against a document whose elements are called record.
xml_check
Report whether a document is well-formed, with a line and column if it is not.
{"name":"xml_check","arguments":{"xml":"<a/>"}}
The document is well-formed (2 nodes).
xml_validate
Validate against an XML Schema, returning every violation with the path to the element it concerns.
| Argument | Type | |
|---|---|---|
xml | string | The document |
xsd | string | The schema |
xml_format
Format an XML document with configurable indentation (spaces) and empty element style, or minify it.
{"name":"xml_format","arguments":{"xml":"<root><item/></root>","indent":2}}
| Argument | Type | Default | |
|---|---|---|---|
xml | string | *(required)* | The document |
indent | integer | 0 | Spaces per indentation level (0 for minified) |
empty_elements | string | "self-closing" | "self-closing" ( ), "spaced" ( ), or "expanded" ( ) |
Protocol
MCP over JSON-RPC 2.0, implemented by rmcp, the official Rust SDK. Two revisions are current and both are served: 2025-11-25, with an initialize handshake, and 2026-07-28, which has no handshake — each request names its revision in _meta and server/discover describes the server. Older revisions back to 2024-11-05 are accepted from a client that asks for them.
| Method | |
|---|---|
initialize | Capabilities, server info, the negotiated revision |
server/discover | The same, for the stateless revision |
tools/list | The five tools: input schema, output schema, annotations |
tools/call | Invoke one |
ping | Answered |
Every tool is annotated read-only, idempotent and closed-world, so a client can call it without asking.
The two kinds of failure are kept apart, because MCP distinguishes them and a model only ever sees one of them.
A tool that ran and could not do the job — a malformed document, an invalid expression — is a *successful* JSON-RPC response carrying isError: true. The model sees the text and can correct itself.
A request the protocol rejects — malformed JSON, an unknown method, a request with an id but no method — is a JSON-RPC error with the standard code, or an HTTP status over HTTP. Nothing ran, and the client handles it rather than the model.
| Situation | Reply |
|---|---|
| Malformed document | result, isError: true |
| Invalid XPath expression | result, isError: true |
| Schema violation | result, isError: true, with the violations as structuredContent |
| Missing or mistyped argument | result, isError: true, naming the field |
| Unknown tool | result, isError: true, naming the five that exist |
| Unknown method | error, -32601 |
id with no method | error |
| Malformed JSON | HTTP 415 over HTTP; skipped over stdio, the session continues |
Errors
A malformed document is not a crash and not a protocol error:
{"name":"xml_check","arguments":{"xml":"<a>"}}
{"content":[{"text":"…not well-formed…","type":"text"}],"isError":true}
The model reads that text and can fix the document or tell the user.
Design
Five tools, not fourteen. Every tool description is in the model's context on every request. A server with twenty narrow tools spends more contex