# ComplySub MCP server

Connect Claude, ChatGPT, Gemini, Grok, Cursor, VS Code, and other AI assistants to ComplySub over MCP. ComplySub checks subcontractors' insurance certificates and contractor licenses against each general contractor's or property manager's requirements, flags gaps and expirations, reminds vendors and their agents, and gives subcontractors one compliance packet to share.

- Server URL: `https://complysub.agntwrk.com/mcp`
- Transport: Streamable HTTP
- Sign-in: OAuth 2.1 in your browser on first use; no API key

## Organizations and plans

ComplySub is organized by organization: a general contractor or property manager, or a subcontractor. When you approve the sign-in, the assistant is connected to the organization that is active in your account at that moment, and the sign-in page names it. To use another organization, switch to it in the dashboard and connect again.

Assistant access is part of the Pro and Business plans for general contractors and the Subs Pro plan for subcontractors. On other plans every tool answers with a link to upgrade. Tools act with your membership: if you are removed from the organization the connection stops working.

`send_update_request` is the only tool that reaches outside the app: it emails a vendor and its insurance agent, needs an owner or admin, and is limited to one request per vendor per 24 hours. `draft_update_request` shows the text first and sends nothing. Certificate values are read from documents by software and are not a legal opinion.

## Connect your assistant

### Claude Code

1. Add the server. Use `--scope user` to make it available in every project, or `--scope project` to write it to `.mcp.json` for your team.
2. Run `/mcp` inside Claude Code and follow the browser sign-in (or run `claude mcp login complysub`).

Terminal:

```bash
claude mcp add --transport http complysub https://complysub.agntwrk.com/mcp
```

Vendor documentation: https://code.claude.com/docs/en/mcp

### Claude Desktop, claude.ai on the web, and Claude mobile

1. Open Customize, then Connectors.
2. Click +, then Add custom connector.
3. Enter the server URL https://complysub.agntwrk.com/mcp and click Add, then sign in when asked.
4. On Team and Enterprise plans an owner adds it first under Organization settings, then Connectors; members then sign in individually.

Anthropic connects to the server from its own network, so the URL must be reachable from the public internet. Connectors you add on the web also appear in the mobile apps. Custom connectors are available on all plans; the free plan allows one.

Vendor documentation: https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp

### ChatGPT

1. On the web, open Settings, then Security and login, and turn on Developer mode.
2. In the Plugins section select the plus button to create a developer-mode app for a remote MCP server.
3. Enter the server URL https://complysub.agntwrk.com/mcp and choose OAuth for authentication, then sign in when asked.

Developer mode is offered on paid web plans; your workspace admin may need to enable it. Write actions ask for confirmation by default.

Vendor documentation: https://developers.openai.com/api/docs/guides/developer-mode

### OpenAI API

1. Add an `mcp` tool to a Responses API request.
2. The API does not run the OAuth sign-in: your application obtains an access token for this server and passes it as `authorization` on every request.

Responses API tool:

```json
{
  "type": "mcp",
  "server_label": "complysub",
  "server_url": "https://complysub.agntwrk.com/mcp",
  "authorization": "<access token>"
}
```

Vendor documentation: https://developers.openai.com/api/docs/guides/tools-connectors-mcp

### OpenAI Codex CLI

1. Add the server to `~/.codex/config.toml`.
2. Run `codex mcp login complysub` and finish the sign-in in the browser.

~/.codex/config.toml:

```toml
[mcp_servers.complysub]
url = "https://complysub.agntwrk.com/mcp"
```

Terminal:

```bash
codex mcp login complysub
```

Vendor documentation: https://learn.chatgpt.com/docs/extend/mcp?surface=cli

### Gemini CLI

1. Add the server.
2. Run `/mcp auth complysub` inside Gemini CLI and finish the sign-in in the browser.

Terminal:

```bash
gemini mcp add --transport http complysub https://complysub.agntwrk.com/mcp
```

Vendor documentation: https://geminicli.com/docs/tools/mcp-server/

### Gemini app

1. On gemini.google.com, open Settings, then Connected Apps.
2. Under Custom apps choose Add a custom app.
3. Enter the server URL https://complysub.agntwrk.com/mcp, then continue and sign in.

Google limits custom apps to personal Google accounts for adults in the US; work and school accounts are not supported. Connections made on the web also work in the mobile app.

Vendor documentation: https://support.google.com/gemini/answer/17209137

### Grok and the xAI API

1. In the Grok app, open grok.com/connectors, choose New Connector, then Custom, enter the server URL, and complete the sign-in.
2. In the xAI API, add an `mcp` tool to a Responses API request at `https://api.x.ai/v1/responses`. Pass an access token for this server as `authorization`; the API does not run the sign-in.

xAI API tool:

```json
{
  "type": "mcp",
  "server_label": "complysub",
  "server_url": "https://complysub.agntwrk.com/mcp",
  "authorization": "<access token>"
}
```

Vendor documentation: https://docs.x.ai/docs/guides/tools/remote-mcp-tools, https://docs.x.ai/grok/connectors

### Cursor

1. Use the install link, or add the server to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (this project).
2. Complete the sign-in if Cursor asks for it.

mcp.json:

```json
{
  "mcpServers": {
    "complysub": {
      "url": "https://complysub.agntwrk.com/mcp"
    }
  }
}
```

Add to Cursor: cursor://anysphere.cursor-deeplink/mcp/install?name=complysub&config=eyJ1cmwiOiJodHRwczovL2NvbXBseXN1Yi5hZ250d3JrLmNvbS9tY3AifQ==

Vendor documentation: https://cursor.com/docs/context/mcp/install-links

### VS Code and GitHub Copilot

1. Use the install link, run the command, or add the server to `.vscode/mcp.json`.
2. Start the server from the MCP view or the file's inline Start action and complete the sign-in.

.vscode/mcp.json:

```json
{
  "servers": {
    "complysub": {
      "type": "http",
      "url": "https://complysub.agntwrk.com/mcp"
    }
  }
}
```

Terminal:

```bash
code --add-mcp '{"name":"complysub","type":"http","url":"https://complysub.agntwrk.com/mcp"}'
```

Install in VS Code: vscode:mcp/install?%7B%22name%22%3A%22complysub%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fcomplysub.agntwrk.com%2Fmcp%22%7D

Vendor documentation: https://code.visualstudio.com/docs/copilot/customization/mcp-servers

### Any other MCP client

1. Add a remote (HTTP) MCP server with the URL https://complysub.agntwrk.com/mcp.
2. It speaks Streamable HTTP and signs in with OAuth 2.1 (authorization code with PKCE S256, dynamic client registration). Clients that follow the MCP authorization spec discover everything from the URL.
3. To test a connection, run the MCP Inspector and choose the Streamable HTTP transport.

Terminal:

```bash
npx @modelcontextprotocol/inspector --server-url https://complysub.agntwrk.com/mcp --transport http
```

Vendor documentation: https://modelcontextprotocol.io/docs/tools/inspector

## Tools

- `health` (read-only): Report that the app is up, its name, and the enabled features.
- `whoami` (read-only): Return the signed-in user (id, email, name) and the scope (store or tenant) every other tool acts on. Use it to confirm which account an answer is about.
- `list_findings` (read-only): List the findings (problems the checks found) for this store, newest first. Filter by status, severity, or check id; page with offset. Use findings_summary first for the big picture and get_finding for one finding's evidence.
- `get_finding` (read-only): Get one finding in full: its evidence, dates, what its check looks for and why it matters, and links to where it can be fixed. Use after list_findings when you need detail.
- `findings_summary` (read-only): Counts of this store's findings: all by status, and the open ones by severity and by check. Start here to see how bad things are before listing anything.
- `list_checks` (read-only): List the checks this app can run: id, what each looks for, the plan that unlocks it, and whether it is enabled for this store (a check turned off in the store's settings is not). Use to find a valid check id for run_check or list_findings.
- `run_check` (changes data): Run one check now for this store and update its findings: new problems are created, fixed ones resolved. Returns how many findings were created, seen again, and resolved. Use run_scan to run every enabled check; do not call this repeatedly.
- `run_scan` (changes data): Run every enabled check now for this store (as the dashboard's Run checks now button does) and return how many findings were created, how many are reported in total, and how many checks failed. Can take a while; use run_check for one check.
- `resolve_finding` (changes data): Mark a finding resolved. It reopens by itself if a later scan sees the problem again. Use after the problem is fixed or accepted.
- `snooze_finding` (changes data): Hide an open finding for a number of days (1 to 365); it reopens after that. Use for problems that will be dealt with later. A resolved finding cannot be snoozed.
- `reopen_finding` (changes data): Set a snoozed or resolved finding back to open. Use when a problem was closed by mistake or is back.
- `list_vendors` (read-only): List this organization's vendors and subcontractors with their open finding counts and when their latest certificate of insurance expires. Filter by project, status, or whether they have open findings; page with offset. Use get_vendor_compliance for one vendor in detail.
- `get_vendor_compliance` (read-only): Get one vendor's compliance picture: the requirement it is held to, the latest certificate of insurance (policies, limits, endorsements, expirations), contractor licenses, and open findings. Certificate values are read by software and not a legal opinion.
- `list_projects` (read-only): List this organization's projects with the number of vendors on each and how many of them have open findings. Use the project id to filter list_vendors.
- `list_expiring` (read-only): List insurance policies on the latest certificate that expire within a number of days (already expired ones included), soonest first. A general contractor sees its active vendors' policies; a subcontractor sees its own.
- `draft_update_request` (read-only): Write the email that asks a vendor and its insurance agent for an updated certificate, listing exactly what is missing or out of date from the vendor's open findings. Returns the subject, body, and recipients; nothing is sent.
- `send_update_request` (changes data): Email the update request to the vendor and its insurance agent (the text draft_update_request returns) and record it in the vendor's history. Owners and admins only. Limited to one request per vendor per 24 hours and 20 per organization per day.
- `get_packet` (read-only): Get this subcontractor's packet: its documents, the latest certificate of insurance in detail, its contractor licenses, and, for each request from a general contractor that is still open or met, whether the packet is ready or what is missing. Certificate values are read by software and not a legal opinion.
- `list_requests` (read-only): List the requests general contractors made of this subcontractor, with the requirements each one sets (coverage limits, endorsements, license, minimum days of validity) and how many open findings it has. Use get_packet for readiness against the current packet.

## Prompts

- `triage_findings`: Summarize the open findings by severity and propose an order of work.
- `explain_finding` (id): Explain one finding in plain words and say how to fix it.

## Things to ask

- Who am I signed in as, and which store are you looking at?
- How many open findings do I have, and which are the most severe?
- Show me the evidence for the highest-severity open finding and tell me how to fix it.
- Run all checks and tell me what is new.
- Snooze the low-severity findings for two weeks.
- Which of my vendors have open findings, worst first?
- Show me the compliance picture for the electrician on the Maple Street project.
- Which certificates expire in the next 30 days?
- Draft an email asking the roofing vendor for an updated certificate.
- Is my packet ready for the contractor that sent me a request, and what is missing?
