Metadata-Version: 2.4
Name: nace-mcp
Version: 0.1.0
Summary: MCP server for the Drex API: calibrated decisions and document jobs for coding agents
Keywords: drex,nace,mcp,model-context-protocol,document-intelligence
Author: Nace AI
Author-email: Nace AI <engineering@nace.ai>
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Dist: nace-sdk>=0.1,<1
Requires-Dist: mcp>=1.28,<2
Requires-Dist: truststore>=0.10.4,<1
Requires-Python: >=3.11
Project-URL: Homepage, https://console.nace.ai
Project-URL: Documentation, https://console.nace.ai/docs/developer-tools/mcp
Description-Content-Type: text/markdown

# nace-mcp

An [MCP](https://modelcontextprotocol.io) server for the [Drex API](https://console.nace.ai/docs): coding agents get calibrated decisions and document jobs as tools. MIT; built on [`nace-sdk`](https://pypi.org/project/nace-sdk/).

```bash
nace-mcp login                           # or: uvx nace-mcp login; paste a key from https://console.nace.ai/dashboard/api-keys
claude mcp add nace -- uvx nace-mcp      # Claude Code
```

`nace-mcp login` checks the key against Drex and saves it to `~/.nace/config.toml` (mode 0600), the file `nace login` from [`nace-cli`](https://pypi.org/project/nace-cli/) writes too, so either signs in both. `--api-key KEY` passes the key, `--api-key -` reads it from stdin; without a terminal one of them is required. `$NACE_API_KEY`, `$NACE_BASE_URL` and `$NACE_CONFIG_PATH` in the server's environment override the file. Without a key the server still starts, and every tool answers with how to sign in until one is saved. The server reads the credentials on each call, so `nace-mcp login` while it runs, to sign in or to replace a refused key, needs no restart. `nace-mcp --version` prints the server and SDK versions.

## Connect an agent

Codex: `codex mcp add nace -- uvx nace-mcp` (or a `[mcp_servers.nace]` table with `command = "uvx"` and `args = ["nace-mcp"]` in `~/.codex/config.toml`).

OpenCode (`opencode.json`): `"mcp": {"nace": {"type": "local", "command": ["uvx", "nace-mcp"], "enabled": true}}`.

Claude Desktop (`claude_desktop_config.json`) and Cursor (`.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "nace": {
      "command": "uvx",
      "args": ["nace-mcp"]
    }
  }
}
```

Add `"env": {"NACE_API_KEY": "nace_sk_..."}` to pass a key without `nace-mcp login`. To install it once instead of through `uvx`: `pipx install nace-mcp` (Python 3.11 or later), then use `nace-mcp` as the command.

## Tools

| Tool | What it does |
| --- | --- |
| `decide` | Answer typed questions (`noul`, `choice`, `score`) about text or JSON with calibrated probabilities. |
| `list_models` | List the models `decide` can use. |
| `upload_document` | Upload a local file into the account's workspace. |
| `parse_document` | Convert a document to Markdown, text or layout blocks. |
| `split_document` | Cut a packet into segments, each with a class. |
| `classify_document` | Label a document, or each page, with your classes. |
| `extract_data` | Fill a JSON Schema, with a status and citation per field. |
| `ground_items` | Find where each quote appears in a document. |
| `get_job` | Read a job and a summary of its result. |
| `wait_for_job` | Wait for a job to finish. |
| `list_jobs` | List jobs, newest first. |
| `cancel_job` | Cancel a running job, or drop a finished one from the list. |
| `get_job_request` | The request a job ran under. |
| `download_job_file` | Save a file a job produced. |
| `get_job_rows` | Page through a parsed sheet's rows. |
| `list_extraction_schemas` | List saved extraction schemas. |
| `get_extraction_schema` | Read a saved schema, at its latest or a given version. |
| `list_extraction_schema_versions` | List a saved schema's versions. |
| `create_extraction_schema` | Save a new extraction schema. |
| `add_extraction_schema_version` | Add a version to a saved schema. |
| `get_documentation` | Usage notes for a topic, shipped with the server. |

The document tools take one source: an `https://` `url`, a local `path` (uploaded first), an uploaded file's `workspace_id` and `file_id`, or a finished parse's `parse_job_id`. They wait up to `wait_seconds` (60 at most) and return the job; one still running comes back with an instruction to call `wait_for_job`. Any other request field goes in a tool's `options`; an argument a tool doesn't have is refused rather than ignored. Results are summarised, and text or JSON longer than `max_inline_chars` is written to a file readable only by you, whose path is returned. For a document too large to return inline, `parse_document` saves the full Markdown to a file.

Full documentation: [MCP server](https://console.nace.ai/docs/developer-tools/mcp).
