Connect Zip to Claude: Automate Approvals, Users, and Workflows
Learn how to connect Zip to Claude using a managed MCP server. Automate procurement requests, vendor onboarding, and invoice approvals with AI agents.
If you need to connect Zip to Claude to automate vendor onboarding, track purchase requests, or manage complex approval workflows, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's LLM function calls and Zip's procurement REST APIs. You can either spend weeks building and maintaining this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL. If your team uses ChatGPT, check out our guide on connecting Zip to ChatGPT or explore our broader architectural overview on connecting Zip to AI Agents.
Giving a Large Language Model (LLM) read and write access to a sprawling enterprise procurement ecosystem like Zip is an engineering challenge. You have to map massive JSON schemas to MCP tool definitions, deal with deeply nested object hierarchies, and handle strict state machine transitions. Every time an endpoint updates or a new feature is added, you have to update your server code, redeploy, and test the integration.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Zip, connect it natively to Claude Desktop, and execute complex procurement workflows using natural language.
The Engineering Reality of the Zip API
A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against a specialized procurement platform like Zip is painful. You are integrating an API designed around strict financial controls, compliance routing, and multi-stage approvals.
If you decide to build a custom MCP server for Zip, you own the entire API lifecycle. Here are the specific challenges you will face:
Deeply Nested Procurement Ontologies Zip is not a simple CRUD database. A purchase request is tied to a vendor, which contains multiple contacts, legal names, addresses, and tax identifiers. That request is also tied to an approval workflow, which generates sub-queues and individual tasks with specific SLAs. If you expose raw Zip endpoints directly to Claude without structured mapping, the model will frequently hallucinate nested IDs or fail to construct the deep JSON payloads required for write operations. Truto parses Zip's documentation to generate highly specific query and body schemas, teaching Claude exactly what properties are required and where they belong in the payload hierarchy.
Strict State Machine Transitions
You cannot arbitrarily change the state of a financial document in Zip. For example, moving an invoice from a draft state into approval requires specific validation checks. A standard PATCH request might fail if the underlying data lacks a required PO number or matching vendor credit. When building a custom integration, you have to hardcode these business logic rules into your MCP tool descriptions so the LLM knows the prerequisites for action. Truto automates this by deriving tool descriptions directly from the vendor's API definitions.
Handling Rate Limits and 429 Errors
Zip enforces rate limits to protect its infrastructure. When an AI agent attempts to iterate through hundreds of purchase requests to generate a spend report, it will likely hit these limits. Truto does not retry, throttle, or apply backoff on rate limit errors. If the upstream Zip API returns an HTTP 429 Too Many Requests, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit information into standard headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. The caller (the LLM client or agent framework) is fully responsible for reading these headers and implementing its own retry and backoff logic.
Instead of building this infrastructure from scratch, you can use Truto to dynamically expose Zip's API endpoints as ready-to-use MCP tools.
How to Generate a Zip MCP Server with Truto
Truto creates MCP servers dynamically based on the integrated account's configuration. The server is fully self-contained - the URL includes a cryptographic token that routes requests to the correct tenant and applies your specified security filters. There are two ways to generate this URL.
Method 1: Via the Truto UI
For ad-hoc configurations and testing, the UI is the fastest approach.
- Navigate to the Integrated Accounts page in your Truto dashboard.
- Select your connected Zip account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (name, allowed methods, tags, and expiration).
- Copy the generated MCP server URL (e.g.,
https://api.truto.one/mcp/a1b2c3d4...).
Method 2: Via the API
For production deployments and dynamic agent provisioning, you should generate the MCP server programmatically. Truto provides a REST endpoint that validates the configuration, stores a hashed token in a global KV edge network, and returns the URL.
Endpoint: POST /integrated-account/:id/mcp
// Example: Creating a read-only Zip MCP server
const response = await fetch('https://api.truto.one/integrated-account/zip-account-id/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TRUTO_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: "Zip AP Analytics Agent",
config: {
methods: ["read"], // Restricts Claude to GET/LIST operations
tags: ["invoices", "vendors"]
},
expires_at: "2026-12-31T23:59:59Z"
})
});
const data = await response.json();
console.log(data.url); // The MCP server URLConnecting the MCP Server to Claude
Once you have your Truto MCP server URL, you must register it with your Claude client. Because Truto's MCP servers communicate over HTTP Server-Sent Events (SSE) via the standard JSON-RPC 2.0 protocol, no custom backend code is required.
Method A: Via the Claude UI
If you are using the Claude Desktop app or Web UI with custom connector support:
- Open Claude and navigate to Settings.
- Click on Integrations (or Connectors depending on your tier).
- Click Add MCP Server.
- Paste the Truto MCP URL into the Server URL field.
- Click Add.
Claude will immediately perform a handshake with the URL, fetch the available Zip tools, and store them in context.
Method B: Via Manual Config File
If you prefer to configure Claude Desktop via the claude_desktop_config.json file, you can utilize the official MCP SSE transport module.
{
"mcpServers": {
"zip_procurement": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"--url",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Save the file and restart Claude Desktop. The application will initialize the server on startup.
Security and Access Control
Giving an AI agent access to procurement data requires strict security guardrails. Truto's MCP servers support multiple layers of access control configured at the token level:
- Method Filtering (
config.methods): Restrict the server to specific operation types. Pass["read"]to allow onlyGETandLISTrequests, or explicitly name methods like["create_a_zip_vendor"]. - Tag Filtering (
config.tags): Scope access to specific functional areas. For example, pass["finance"]to expose only invoice and budget tools, hiding IT and user administration tools. - Extra Authentication (
require_api_token_auth): By default, possessing the MCP URL grants access. By setting this totrue, the MCP client must also pass a valid Truto API token in the Authorization header, preventing unauthorized access if the URL leaks. - Automatic Expiration (
expires_at): Set a strict TTL (Time-To-Live) for the server. Truto uses Durable Object alarms to automatically purge the token from edge KV storage at the exact second it expires.
Zip Hero Tools for Claude
Truto automatically generates descriptive tool names, query schemas, and body schemas by parsing Zip's API definitions. Here are the most critical operations you can execute via the MCP server.
List All Zip Requests
Search and filter purchase requests. This is the foundation of any procurement status agent. It returns full request objects including priority, amount, vendor, requester, and the current workflow status.
"Claude, list all purchase requests created this month where the status is pending and the amount is over $10,000."
Get Single Zip Invoice by ID
Extracts the full details of a specific invoice. This returns header information, erp_sync_status, applied vendor credits, purchase order matches, and any active exception tasks preventing payment.
"Retrieve the invoice with ID 8f7d9a2b and tell me if there are any exception tasks blocking its ERP sync."
List All Zip Approvals
Queries the approval nodes across the platform. Returns the display status, SLA tracking (sla_hours), assignee, tasks, and the specific stage of the approval matrix.
"Find all approvals assigned to the IT Hardware queue that are currently past their SLA due date."
Create a Zip Comment
Allows the AI agent to interact directly with humans on the Zip platform. It can post a comment on a purchase requisition or an invoice, optionally tagging specific users.
"Add a comment to purchase request req-492 asking the requester to upload a revised quote from the vendor."
Create a Zip Vendor
Upserts a vendor in the Zip directory keyed by external_id. Returns the created or updated vendor object including categories, contacts, and legal entity status.
"Create a new vendor profile for 'Acme Corp' using external ID 'v-883' and categorize them under 'Software Services'."
Zip Invoices Submit
Transitions a drafted bill invoice into the active approval workflow. This endpoint validates the invoice for completeness before routing it to the appropriate stakeholders.
"Submit invoice inv-992 for approval now that the missing purchase order has been matched."
For a comprehensive list of all available Zip operations, schemas, and required parameters, review the complete inventory on the Zip integration page.
Workflows in Action
Individual tools are useful, but the real power of MCP is enabling Claude to orchestrate multi-step workflows. By chaining these API calls together, AI agents can handle complex procurement tasks autonomously.
Workflow 1: Vendor Onboarding and Discrepancy Resolution
Persona: Procurement Operations Manager
"Claude, check if we have an active vendor profile for 'CloudScale Solutions'. If not, create a draft vendor profile for them. Then, find any pending purchase requests mentioning 'CloudScale' and add a comment telling the requester that vendor onboarding is in progress."
list_all_zip_vendors: Claude searches the Zip vendor directory for "CloudScale Solutions".create_a_zip_vendor: Finding no match, Claude constructs the payload to create a new vendor record, noting the status as pending.list_all_zip_requests: Claude searches active purchase requests for mentions of the vendor name in the description or line items.create_a_zip_comment: Claude posts a structured comment on the matching request IDs, alerting the employees that the procurement team is processing the vendor.
sequenceDiagram
autonumber
participant Claude as Claude Desktop
participant Truto as Truto MCP Server
participant Zip as Zip API
Claude->>Truto: Call tool `list_all_zip_vendors`
Truto->>Zip: GET /vendors?query=CloudScale
Zip-->>Truto: Return empty array
Truto-->>Claude: Result: No vendors found
Claude->>Truto: Call tool `create_a_zip_vendor`
Truto->>Zip: POST /vendors (Payload: Name, Status)
Zip-->>Truto: Return vendor_id: 1044
Truto-->>Claude: Result: Vendor created
Claude->>Truto: Call tool `list_all_zip_requests`
Truto->>Zip: GET /requests?search=CloudScale
Zip-->>Truto: Return matching request (req-88)
Truto-->>Claude: Result: Found req-88
Claude->>Truto: Call tool `create_a_zip_comment`
Truto->>Zip: POST /comments (Payload: req-88, text)
Zip-->>Truto: Return success
Truto-->>Claude: Workflow completeWorkflow 2: SLA Monitoring and Invoice Exception Handling
Persona: Accounts Payable Specialist
"Claude, find all invoices currently stuck in an exception state. For each one, look up the associated purchase request, find out who the requester is, and list the pending approval nodes holding up the payment."
list_all_zip_invoices: Claude queries invoices filtering for an exception status.get_single_zip_invoice_by_id: For a stuck invoice, Claude retrieves the deep nested details to extract thepurchase_orderID and exception task reasons.get_single_zip_request_by_id: Claude queries the original request to identify the department and the specific employee who initiated the purchase.list_all_zip_approvals: Claude filters the approval nodes by the request ID to find exactly which queue (e.g., Legal, Security, or Finance) is currently breaching its SLA.
flowchart TD
A["list_all_zip_invoices<br>(Filter: exception status)"] --> B["get_single_zip_invoice_by_id<br>(Extract PO and Exception)"]
B --> C["get_single_zip_request_by_id<br>(Identify Requester/Dept)"]
C --> D["list_all_zip_approvals<br>(Find stalled node & SLA)"]
D --> E["Format comprehensive summary<br>for AP Specialist"]The Procurement AI Mandate
Procurement is fundamentally a workflow coordination problem. It requires gathering context from disjointed systems, verifying compliance rules, and chasing stakeholders for approvals. By connecting Zip to Claude via a managed MCP server, you transform a static LLM into an active participant in your procure-to-pay lifecycle.
Building this integration layer in-house requires managing OAuth lifecycles, translating complex JSON schemas, and implementing robust error handling for HTTP 429 rate limits. Truto abstracts this away, generating dynamic, documentation-driven MCP tools that keep pace with the Zip API automatically.
Stop writing boilerplate integration code. Let your AI agents securely orchestrate procurement.
FAQ
- How does Claude authenticate with the Zip API via MCP?
- Claude authenticates using a secure, dynamically generated MCP server URL provided by Truto. This URL contains a cryptographic token mapped to your specific Zip workspace credentials. Truto handles the underlying API authentication automatically.
- Does Truto automatically handle Zip API rate limits?
- No. Truto does not retry, throttle, or apply backoff on rate limit errors. If the Zip API returns an HTTP 429, Truto passes that error directly to Claude, normalizing the rate limit info into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller is responsible for implementing retry and backoff logic.
- Can I restrict which Zip tools Claude has access to?
- Yes. When generating the MCP server via Truto, you can apply method filtering (e.g., read-only access) and tag filtering to restrict Claude to specific tools, preventing unauthorized write operations.