For staff
Work your queue from your assistant
The management MCP server lets Claude Code or Codex call the same audited management actions the staff portal uses. It runs on your machine, as you, with your own signed-in session. Nothing here bypasses the portal's permissions.
How it works
- Step 1
Your assistant
Claude Code or Codex starts the server as a local process and talks to it over stdio.
- Step 2
The MCP server
Validates every argument, then calls the management API over HTTPS with your staff token.
- Step 3
The management API
Authenticates you, checks your role and multi-factor level, and records every action with source=mcp.
The 21 tools
Case reads
- cases_search
- cases_get
- cases_timeline
Paged in the database; cursors are bound to the filters that produced them.
Queue reads
- queue_get_summary
- queue_list
The same queue the portal shows, in pages of up to 100.
Document review
- documents_list
- documents_get_review_context
- documents_decide
A decision needs a live review claim and an explicit "human review complete" assertion. OCR is advisory only.
Payment review
- payments_list_pending
- payments_get
- payments_decide
Wire approval binds the exact payment and the exact amount.
Work and communication reads
- tasks_list
- case_emails_list
- revenue_get_summary
Read-only.
Safe work mutations
- cases_assign
- cases_add_internal_note
- cases_advance
- tasks_create
Every mutation carries a request ID and is idempotent. Advancement performs only the canonical next step.
Controlled communication
- communications_preview
- communications_send
- broadcasts_preview
Existing templates to the applicant on the exact case only. There is no broadcast send.
What it will never do
- Read or change applicant accounts, or act as an applicant.
- Download raw documents. Previews are 300-second image links, audited per grant.
- Send free-form email, add recipients, or edit subjects and bodies.
- Create, promote, deactivate or delete staff.
- Delete cases, payments or documents.
- Bypass an unknown mutation outcome by retrying with a new request ID.
Set it up
You need Node 22, a checkout of the repository, a staff account with authenticator enrolment, and the provenance capability from the platform operator. Choose your system and assistant; the commands below are generated for your paths.
Build the server once
cd "C:\Users\you\Code\paraguay-plan" corepack pnpm install --frozen-lockfile corepack pnpm mcp:buildWrite your staff token to an owner-only file
Sign in to the staff portal, complete the authenticator challenge, and copy the session access token. It must have between five minutes and eight hours left. Save it as the only content of the file below and lock the file down. Never paste the token into a config file or a chat.
# Write the token you copied, then restrict the file to your account only. $tokenFile = "C:\Users\you\.tpp\staff.jwt" New-Item -ItemType Directory -Force (Split-Path $tokenFile) | Out-Null Set-Content -Path "$tokenFile.new" -Value "<paste token>" -NoNewline -Encoding ascii icacls.exe "$tokenFile.new" /inheritance:r /grant:r "${env:USERNAME}:(R,W)" Move-Item -LiteralPath "$tokenFile.new" -Destination $tokenFile -ForceExport the environment
$env:MCP_MANAGEMENT_RPC_URL = "https://manage.theparaguayplan.com/api/rpc" $env:MCP_STAFF_ACCESS_TOKEN_FILE = "C:\Users\you\.tpp\staff.jwt" $env:MANAGEMENT_MCP_INTERNAL_CAPABILITY = "<value from the platform operator>" $env:MCP_REQUEST_TIMEOUT_MS = "15000"The provenance capability is issued by the platform operator. Ask for it directly; it is never published.
Register the server in Claude Code
claude mcp add --scope local paraguay-management --env MCP_MANAGEMENT_RPC_URL=$env:MCP_MANAGEMENT_RPC_URL --env MCP_STAFF_ACCESS_TOKEN_FILE=$env:MCP_STAFF_ACCESS_TOKEN_FILE --env MANAGEMENT_MCP_INTERNAL_CAPABILITY=$env:MANAGEMENT_MCP_INTERNAL_CAPABILITY --env MCP_REQUEST_TIMEOUT_MS=15000 -- node "C:\Users\you\Code\paraguay-plan\apps\mcp-server\dist\stdio.js"Verify
claude mcp list # then inside Claude Code: /mcpYou should see exactly 21 tools. If the server refuses to start, the token is missing, expired, not AAL2, or the file permissions are too open. Fix the cause; do not retry blindly.
When a tool says no
- token_expired
- Your session token is missing, expired or invalid. Sign in again and replace the token file.
- mfa_required
- Complete the authenticator challenge in the portal; MCP requires an AAL2 session.
- rate_limited
- You are being throttled. The error carries retryAfterSeconds; wait that long.
- conflict
- The case is not in the state the action needs. Read it again before retrying.
- mutation_outcome_unknown
- The action may have happened. Do not retry with a new request ID; ask an operator to reconcile.
- staff_access_required
- The signed-in account is not an active case manager or admin.
Read-only API keys for integrations
Dashboards and automations that only need to read use the REST API with an API key rather than MCP. Administrators mint keys in the staff portal under Settings, then API keys. Every key expires between 30 days and 2 years after creation; rotate before expiry to keep an integration running without a gap. The key is shown once, at creation.
See what changed recently