Connect Zip to ChatGPT: Manage Vendors, Invoices & Requests via MCP
Learn how to connect Zip to ChatGPT using a managed MCP server. Execute complex procurement workflows, manage vendors, and triage invoices using AI agents.
If you need to give an AI agent read and write access to your procurement stack, connecting Zip to ChatGPT using a Model Context Protocol (MCP) server is the most robust path forward. (If your team uses Claude, check out our guide on connecting Zip to Claude or explore our broader architectural overview on connecting Zip to AI Agents).
Procurement and AP automation generate massive amounts of unstructured communication - intake requests, vendor back-and-forth, contract redlines, and budget justifications. Giving a Large Language Model (LLM) the ability to interact with Zip directly means you can automate vendor onboarding, triage intake approvals, and extract structured invoice data from raw emails. But integrating with a sprawling Procure-to-Pay (P2P) platform is an engineering challenge.
You can either spend weeks building, hosting, and maintaining a custom MCP server, or you can use a managed integration layer that handles the boilerplate for you. This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Zip, connect it natively to ChatGPT, and execute complex procurement workflows using natural language.
The Engineering Reality of the Zip API
A custom MCP server is a self-hosted translation layer that maps an LLM's tool calls into REST API requests. While the MCP standard provides a predictable way for models to discover tools, implementing it against enterprise procurement APIs is painful. If you decide to build a custom MCP server for Zip, you own the entire API lifecycle.
Here are the specific integration challenges you will face when working with Zip:
Polymorphic Data Models and Deep Nesting
Zip is built to handle complex, enterprise-grade intake workflows. A single "Request" in Zip is rarely a flat object. It contains highly nested data arrays: approval chains, SLA tracking, questionnaire responses with weighted scoring, and dynamic line items. If your MCP server just dumps the raw get_single_zip_request_by_id response into ChatGPT's context window, the model will struggle to parse the deep JSON hierarchy. You have to write logic to flatten or selectively project these schemas so the LLM doesn't hallucinate workflow stages.
Strict External ID Enforcement
Zip is designed to sit in front of core ERPs (like NetSuite or SAP). Because of this, entities like Vendors, Departments, and GL Codes rely heavily on external_id mappings. When an LLM wants to create or update a vendor, it cannot just guess an ID. The API often requires an upsert operation keyed by the ERP's external_id. Your MCP server needs to provide clear instructions in its tool descriptions so the LLM knows exactly when and how to pass external mapping identifiers.
Handling API Rate Limits and 429 Errors Zip enforces standard API rate limits. If your AI agent gets stuck in a loop - perhaps iterating over thousands of invoices to calculate total spend - the Zip API will return an HTTP 429 Too Many Requests error.
Important note on Truto's architecture: Truto does not automatically retry, throttle, or apply exponential backoff when a 429 occurs. When the upstream Zip API rejects a request due to rate limits, Truto passes that 429 error directly back to the caller. We normalize the upstream rate limit information into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller (your MCP client or agent framework) is entirely responsible for reading these headers and executing its own backoff logic. Do not build agents assuming the infrastructure will magically absorb rate limit errors.
The Managed MCP Approach
Instead of forcing your engineering team to build OAuth token refresh workers, schema generators, and proxy routers, Truto automatically exposes any connected Zip account as a secure, standalone MCP server.
Tools are derived dynamically from Truto's integration configuration and documentation records. If an endpoint is documented, it becomes an available tool for ChatGPT to use. Every MCP server is scoped to a single integrated account, authenticated via a cryptographic token in the URL.
Here is how to set it up.
Step 1: Creating the Zip MCP Server
You can generate an MCP server for your connected Zip instance in two ways: via the Truto dashboard, or programmatically via the API.
Method A: Via the Truto UI
For internal tooling and one-off workflows, the UI is the fastest path:
- Navigate to your Truto dashboard and open the Integrated Accounts page.
- Select your connected Zip account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (name, allowed methods, tags, and expiry).
- Copy the generated MCP server URL.
Method B: Via the API
If you are building an AI product and need to generate MCP servers dynamically for your customers, use the REST API. You will make a POST request to the /integrated-account/:id/mcp endpoint.
curl -X POST https://api.truto.one/integrated-account/YOUR_ACCOUNT_ID/mcp \
-H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Zip Procurement Agent",
"config": {
"methods": ["read", "write"],
"tags": ["procurement", "ap_automation"]
},
"expires_at": "2026-12-31T23:59:59Z"
}'The API provisions the server, validates that tools exist for your requested filters, and returns a self-contained JSON-RPC endpoint:
{
"id": "mcp-zip-789",
"name": "Zip Procurement Agent",
"config": { "methods": ["read", "write"] },
"expires_at": "2026-12-31T23:59:59Z",
"url": "https://api.truto.one/mcp/abc123def456..."
}This URL contains the hashed routing token. It is all the LLM client needs to connect.
Step 2: Connecting the MCP Server to ChatGPT
With your Truto MCP URL in hand, you can hook it into ChatGPT.
Method A: Via the ChatGPT UI
If you are using ChatGPT Plus, Team, or Enterprise, you can connect the server directly in the desktop or web client (requires Developer Mode to be enabled):
- In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
- Toggle on Developer mode.
- Under MCP servers / Custom connectors, click Add new.
- Enter a name for the connector (e.g., "Zip Procurement").
- Paste your Truto MCP URL into the Server URL field.
- Save and exit.
ChatGPT will immediately ping the endpoint, execute the initialization handshake, and list the available Zip tools in your prompt interface.
Method B: Via a Local SSE Client (Manual Configuration)
If you are running a custom AI agent framework or want to proxy ChatGPT through a local environment, you can use the official @modelcontextprotocol/server-sse wrapper to connect to Truto's remote endpoint.
Create a configuration file (e.g., zip_mcp_config.json):
{
"mcpServers": {
"zip-integration": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"--url",
"https://api.truto.one/mcp/abc123def456..."
]
}
}
}Your agent framework will launch this process, which maintains a Server-Sent Events (SSE) connection to Truto's JSON-RPC router, translating local tool requests to the remote Zip API.
Zip Hero Tools for ChatGPT
Truto automatically maps Zip's REST endpoints into heavily documented, schema-rich tools. Here are 6 of the most powerful tools your AI agent can leverage.
list_all_zip_requests
This tool searches and lists intake approvals in Zip. It returns rich context including the request status, SLA hours, assignee, and priority. This is the primary tool for triaging procurement pipelines.
"Find all open Zip requests assigned to the IT department that are currently violating their SLA hours. Give me a summary of the requester and the vendor involved for each."
list_all_zip_approvals
Retrieves the detailed approval graph for a given context. It returns nodes including node_type, start_time, due_date, and current assignee. This allows the LLM to identify exactly who is blocking a specific purchase.
"Look up the approval chain for request ID 4592. Identify which approval node is currently pending and tell me the email address of the assignee holding it up."
create_a_zip_vendor
Upserts a vendor in Zip. Because Zip sits in front of the ERP, this tool is designed to accept an external_id (like a NetSuite internal ID) along with name, address, and status.
"We just onboarded 'Acme Software' in our ERP with the external ID 'NS-9921'. Create this vendor in Zip and set their status to active."
list_all_zip_invoices
Searches Zip for bills and invoices based on status, vendor, or date range. It returns line items, purchase order matchings, and ERP sync status, making it perfect for AP audits.
"List all invoices submitted by vendor 'Datadog' in the last 30 days that have an ERP sync status of failed. Summarize the invoice numbers and the failure reasons."
zip_invoices_submit
Transitions a draft invoice into the active approval workflow. This is a critical write-action tool for automating the AP funnel once OCR or manual data entry is complete.
"Take draft invoice ID 'inv_88392' and submit it for approval. Confirm once the status transitions successfully."
create_a_zip_budget
Creates or updates a budget record in Zip. This tool accepts start dates, end dates, amounts, and tracking dimensions, allowing AI agents to dynamically adjust FP&A limits based on external triggers.
"Create a new Q3 marketing budget in Zip for $150,000, starting July 1 and ending September 30. Assign it to the Marketing department dimension."
To view the complete inventory of available Zip tools, schemas, and endpoints, visit the Zip integration page.
Workflows in Action
Giving ChatGPT isolated tools is interesting, but the real power comes from chaining them together to solve multi-step procurement problems. Here are two real-world AP workflows.
Workflow 1: Vendor Onboarding and Intake Triage
When a new software vendor is requested, the procurement team has to verify if the vendor exists, check the status of the request, and identify blockers.
"Check if a vendor named 'Vercel' exists in Zip. If they do not, create them using external ID 'ERP-VRC-01'. Then, find any open requests mentioning Vercel and tell me who the current approver is."
Execution Steps:
- The agent calls
list_all_zip_vendorsfiltering by the name "Vercel". - Realizing the vendor is missing, it calls
create_a_zip_vendor, mapping the providedexternal_idand name into the body schema. - The agent calls
list_all_zip_requestssearching for the newly created vendor ID. - It takes the resulting request IDs and calls
list_all_zip_approvalsto find the pending nodes and assignees. - The LLM formats this raw JSON into a clean summary for the user.
sequenceDiagram
participant LLM as ChatGPT
participant MCP as Truto MCP Server
participant Zip as Zip API
LLM->>MCP: call list_all_zip_vendors
MCP->>Zip: GET /vendors?name=Vercel
Zip-->>MCP: { "items": [] }
MCP-->>LLM: Empty result
LLM->>MCP: call create_a_zip_vendor
MCP->>Zip: POST /vendors (external_id: ERP-VRC-01)
Zip-->>MCP: { "id": "ven_123", "name": "Vercel" }
MCP-->>LLM: Vendor created
LLM->>MCP: call list_all_zip_requests
MCP->>Zip: GET /requests?vendor_id=ven_123
Zip-->>MCP: { "requests": [...] }
MCP-->>LLM: Request data returnedWorkflow 2: Invoice Discrepancy Resolution
AP teams spend hours manually matching invoices to purchase orders and pushing them through ERP syncs.
"Find the invoice with the number 'INV-2026-08' from our pending list. Check if it has a matched purchase order. If it is fully coded, submit it for approval."
Execution Steps:
- The agent calls
list_all_zip_invoicesfiltering forinvoice_number: INV-2026-08. - It extracts the internal Zip ID from the result and calls
get_single_zip_invoice_by_idto retrieve the deep array of line items andpurchase_orders. - The LLM analyzes the JSON payload, confirms the line items match a valid PO, and verifies the GL codes are present.
- It calls
zip_invoices_submitusing the internal invoice ID to transition the state. - The user receives confirmation that the invoice has entered the approval queue.
Security and Access Control
Procurement data is highly sensitive. You do not want a developer's local ChatGPT instance having unrestricted write access to your corporate Zip account. Truto provides four distinct mechanisms to lock down MCP server scope:
- Method Filtering: Limit an MCP server to specific operation types. Set
methods: ["read"]to allowgetandlistoperations while strictly blockingcreate,update, ordeletetools from being generated. - Tag Filtering: Group tools by functional area. Set
tags: ["invoices", "vendors"]to expose AP tools while hiding sensitive HR or department configuration endpoints. - Expiration Timers: Use
expires_atto create temporary, short-lived servers. Once the ISO timestamp passes, Truto automatically schedules a Durable Object alarm to purge the token and KV entries. - Extra Authentication: Enable
require_api_token_auth: trueto force the MCP client to pass a valid Truto API token in theAuthorizationheader. This ensures that even if the MCP URL leaks, it cannot be used without valid secondary credentials.
Strategic Wrap-Up
Building custom integration infrastructure to connect Zip to ChatGPT is a distraction from your core product. Between mapping complex polymorphic models, managing ERP external identifiers, and handling strict rate limits, maintaining a custom MCP server is a full-time engineering burden.
Truto abstracts this away. By dynamically generating highly-scoped, documentation-driven MCP tools directly from your integrated accounts, you can give your AI agents safe, reliable access to procurement data in minutes, not months.
FAQ
- How do I connect Zip to ChatGPT?
- You can connect Zip to ChatGPT by generating a Model Context Protocol (MCP) server URL via Truto. Once generated, add this URL to ChatGPT's custom connector settings under Developer Mode to expose Zip's API as callable tools.
- Does Truto automatically retry rate-limited Zip API requests?
- No. When the Zip API returns an HTTP 429 Too Many Requests error, Truto passes the error back to the caller along with standardized IETF rate limit headers. Your AI agent or client framework is responsible for handling retries and exponential backoff.
- Can I restrict ChatGPT to read-only access in Zip?
- Yes. When creating the Truto MCP server, you can apply method filtering by setting methods to ['read']. This prevents ChatGPT from accessing create, update, or delete tools.