axm-mcp — MCP server for the axm-protocols ecosystem
Features
- 🔌 Auto-discovery — Finds all
axm.toolsentry points from installed packages - 🛠️ MCP bridge — Exposes discovered tools as Model Context Protocol callables
- 🔎 Compact facade — Four meta-tools (
axm_search/axm_describe/axm_call/axm_capabilities) index the full catalog and keep thetools/listpayload small (toggle viaAXM_MCP_FACADE) - ✅ Verify — One-shot project quality check: audit + init check + AST enrichment
- 🌐 Web fetch — Anti-bot web page fetching via Scrapling (basic / dynamic / stealth)
- 📋 List tools — Built-in
list_toolsmeta-tool to enumerate all available tools and their descriptions
Installation
Connect the server to your MCP client (Claude Code, IDE…) in one command — no
manual install, uvx fetches the latest version on demand:
claude mcp add --scope user axm-mcp -- uvx --python 3.12 --from "axm-mcp[all]@latest" axm-mcp
--scope user installs it globally (available in every session). Drop it to enable AXM per-project instead — the server then loads only in the directory where you run the command.
Prefer editing .mcp.json by hand? Add:
{
"mcpServers": {
"axm-mcp": {
"command": "uvx",
"args": ["--python", "3.12", "--from", "axm-mcp[all]@latest", "axm-mcp"]
}
}
}
The [all] extra is what pulls in the actual tools (audit, ast_*,
git_commit, …); the bare axm-mcp package is only the server shell. See the
Quick Start for
the full walkthrough and why each flag matters.
Server Modes
axm-mcp supports two transport modes. stdio (above) is the simple default — one server process per conversation, works everywhere. HTTP is an advanced option for running a single shared persistent server.
| Mode | Command | Client config | Use case |
|---|---|---|---|
| stdio (default) | axm-mcp |
uvx --from "axm-mcp[all]@latest" axm-mcp |
Simple, one process per conversation |
| HTTP (advanced) | axm-mcp serve |
{"type": "url", "url": "http://localhost:9427/mcp"} |
Single shared server, persistent cache |
For the HTTP setup, see Migrate to HTTP Transport.
CLI Commands
| Command | Description |
|---|---|
axm-mcp |
Start in stdio mode (default) |
axm-mcp serve [--host HOST] [--port PORT] |
Start Streamable HTTP server (default port 9427) |
axm-mcp status [--host HOST] [--port PORT] |
Check whether the HTTP server is running |
axm-mcp stop |
Send SIGTERM to the running HTTP server. Verifies the PID file's process is really axm-mcp (via ps cmdline) before signalling; if the PID was reused by another process, it refuses to kill it and cleans up the stale PID file |
axm-mcp install [--port PORT] [--binary PATH] |
Install axm-mcp as a launchd service (macOS) |
axm-mcp uninstall |
Remove the launchd service |
The HTTP transport exposes a /health endpoint returning {"status": "ok", "tools_count": N}.
Port can also be set via the AXM_MCP_PORT environment variable.
Service Management (macOS)
AXM supervisors discover the HTTP service through the package's axm.daemons
entry point. The published launch plan preserves AXM_PROFILE and an explicit
AXM_MCP_PORT, so the supervised process and its health probe use the same
profile-scoped PID file and port.
axm-mcp can also run as a persistent background service managed by launchd:
# Install and start the service
axm-mcp install
# Remove the service
axm-mcp uninstall
install locates the axm-mcp binary, generates a launchd plist, and loads it via launchctl.
uninstall unloads the service and removes the plist file.
MCP Tools
By default (AXM_MCP_FACADE=1) the server keeps the tools/list payload small
by exposing a compact facade — four meta-tools that index the full catalog —
plus a hot path of frequently-used tools that opt in via expose_directly, and
the always-on built-ins (verify, web_fetch, list_tools). Every other
discovered tool stays reachable through axm_call. Set AXM_MCP_FACADE=0 to fall
back to the legacy behaviour (register every discovered tool directly).
To trim a shared server's surface, set AXM_DISABLE_TOOLS to a comma-separated
list of tool names or glob patterns to exclude at discovery time
(e.g. AXM_DISABLE_TOOLS=bib_*,ticket_*,ast_dead_code). See the
CLI reference for the full
environment-variable table.
| Facade meta-tool | Description |
|---|---|
axm_search |
Search the tool catalog by keyword/tag → name + summary + domain + tags |
axm_describe |
Full invocation contract (typed params + docstring) for one tool |
axm_call |
Execute any tool by name and return its text output |
axm_capabilities |
List tools grouped by domain |
| Built-in / discovered tool | Package | Description |
|---|---|---|
list_tools |
built-in | List all available tools (always enumerates the full surface) |
verify |
built-in | One-shot audit + init check + AST enrichment |
web_fetch |
built-in | Fetch web pages with anti-bot bypass (basic / dynamic / stealth) |
audit |
axm-audit |
Code quality audit (lint, types, complexity, security) |
init_check |
axm-init |
49 governance checks against AXM gold standard |
init_scaffold |
axm-init |
Scaffold a new Python project |
bib_search |
axm-bib |
Search academic papers by title |
bib_resolve |
axm-bib |
Resolve a DOI/arXiv ref → BibTeX |
bib_pdf |
axm-bib |
Download paper PDF |
bib_extract |
axm-bib |
Extract text from PDF |
Development
This package is part of the axm-forge workspace.
git clone https://github.com/axm-protocols/axm-forge.git
cd axm-forge
uv sync --all-groups
uv run --package axm-mcp --directory packages/axm-mcp pytest -x -q
License
Apache-2.0 — © 2026 Gabriel Jarry
Metadata
Release files for axm-mcp 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| axm_mcp-0.6.0.tar.gz | 128.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| axm_mcp-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 184.1 kB
Release files / axm_mcp-0.6.0.tar.gz
| Download URL | axm_mcp-0.6.0.tar.gz |
|---|---|
| Size | 128.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31fcda1fa98ef2dc6083a966d624c11c3a789817d5fa54c05368ca9dc4d61d89
|
|
BLAKE2b-256 checksum How to use checksums |
adb9f4fe96f747915e435751edf5404bdf177dfa94c4fe9f2cecaa2e0488f7da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / axm_mcp-0.6.0-py3-none-any.whl
| Download URL | axm_mcp-0.6.0-py3-none-any.whl |
|---|---|
| Size | 56.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d907ad0b03bbd7bf0723f5bf1c178d9be1ee5a1c2c3f3ea1487febe23e6e5759
|
|
BLAKE2b-256 checksum How to use checksums |
2ac1b517a8f1b74b67e98dfd49a4fe80ef60dd672ab87c979a068e733de006ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency log