Metadata-Version: 2.5
Name: primeoutpost-mcp
Version: 0.0.2
Summary: Local MCP server exposing your PrimeOutpost security program, read-only, to the AI assistant of your choice.
Project-URL: Homepage, https://primeoutpost.com
License-Expression: Apache-2.0
Keywords: ciso,mcp,primeoutpost,security
Requires-Python: >=3.12
Requires-Dist: httpx<1,>=0.28
Requires-Dist: mcp<3,>=2.2
Description-Content-Type: text/markdown

# PrimeOutpost MCP server

Ask your AI assistant about your security program and let it read the answer straight from PrimeOutpost:
the roadmap, the risk register, the decision log, playbooks, framework coverage,
maturity scores and what is in flight this week.

The server runs locally, is read-only, and can never change anything in PrimeOutpost.
A personal access token belongs to exactly one organization, so the assistant sees that organization and nothing else.


## Requirements

- [`uv`](https://docs.astral.sh/uv/) installed, which provides the `uvx` command.
- A personal access token from **Settings -> Security** in PrimeOutpost.


## Usage

### Claude Code

```
claude mcp add primeoutpost -e PRIMEOUTPOST_TOKEN=po_pat_... -- uvx primeoutpost-mcp
```

### Claude Desktop and Cursor

Add this to your MCP configuration file:

```json
{
  "mcpServers": {
    "primeoutpost": {
      "command": "uvx",
      "args": ["primeoutpost-mcp"],
      "env": {
        "PRIMEOUTPOST_TOKEN": "po_pat_..."
      }
    }
  }
}
```

### Team setup (Claude Code)

Each teammate creates their own personal access token and exports it in their shell profile:

```
export PRIMEOUTPOST_TOKEN=po_pat_...
```

Then commit this `.mcp.json` in your repository root:

```json
{
  "mcpServers": {
    "primeoutpost": {
      "command": "uvx",
      "args": ["primeoutpost-mcp"],
      "env": {
        "PRIMEOUTPOST_TOKEN": "${PRIMEOUTPOST_TOKEN}"
      }
    }
  }
}
```


## Configuration

| Variable | Required | Default | Purpose |
| --- | --- | --- | --- |
| `PRIMEOUTPOST_TOKEN` | Yes | none | Personal access token from Settings -> Security. |
| `PRIMEOUTPOST_API_URL` | No | `https://app.primeoutpost.com/api/v1` | API base URL. Only needed to point at a non-production environment. |


## Tools

| Tool | Returns |
| --- | --- |
| `get_roadmap` | Roadmap items, filtered by status, category, domain or free text. |
| `get_risks` | Risk register entries, filtered by status, risk level or free text. |
| `get_decisions` | Decision log entries, filtered by status, impact or free text. |
| `get_item` | One roadmap item, risk, decision or playbook in full, with everything linked to it. |
| `get_gaps` | Coverage percentages and the uncovered controls for each activated framework. |
| `get_maturity` | The composite maturity score with its 90 day trend, or one domain's drill-down. |
| `get_work` | In-flight roadmap items, risks, decisions and playbook steps, with due date buckets. |
| `resolve_refs` | Title and status for a batch of references, for example the ones cited in a document. |


## References

Entities are named by short references: `RM-012` is a roadmap item, `RISK-004` a risk,
`DEC-003` a decision and `PB-002` a playbook. Numbers are per organization. Use them in
your prompt exactly as they appear in the app. The assistant passes one to `get_item` to
read it in full, or a batch to `resolve_refs` to see what a list of references points at.
Case and padding do not matter, so `rm-12` finds `RM-012`.


## Security

Your personal access token is scoped to a single organization and carries your own role,
so the assistant can read exactly what you can read and no more. Tokens expire, and you
can revoke one at any time from **Settings -> Security**. The server runs on your machine,
talks only to your PrimeOutpost API, and sends nothing anywhere else. Every tool is a read:
there is no tool that creates, edits or deletes. What your assistant does with the data
once it has read it is between you and whoever provides that assistant.
