# Procurify MCP connector

Connecting Procurify to Elaichi lets Claude, ChatGPT, Cursor, and the Elaichi Agent look up and maintain vendors, departments, locations, account codes, and users in Procurify, with each person signed in as themselves and every action logged.

Source: https://elaichi.ai/connectors/procurify/

## Facts

| | |
| --- | --- |
| Application | Procurify |
| Category | Spend Management |
| AI tools | 53 |
| Authentication | App credentials |
| Bring your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Procurify is connected

- List every vendor in Procurify added this quarter
- Add a vendor called Northwind Office Supply to Procurify
- Which Procurify departments belong to the Austin location?

## Connect Procurify in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Procurify.
2. Optionally set Share with, then press Connect.
3. Paste your Procurify app credentials. Procurify authenticates the app rather than a person. One person supplies the credentials once, and everyone else works through Share with.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Procurify tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Procurify MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Procurify MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Procurify MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Procurify to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Every scope the client asks for starts ticked except "Delete data and remove access", which you tick yourself. Calling a Procurify tool needs "Run your connected tools". Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Procurify through Elaichi

### Set up a vendor before the first order

Procurement. Add a new supplier to Procurify as soon as the quote is accepted, so the first purchase request has a vendor to point at. Ask for the vendor by name afterward to confirm it landed correctly.

### Clean up stale or duplicate vendor records

Procurement. Pull the full vendor list from Procurify, spot the duplicates and the ones nobody has ordered from, and update or correct them in one pass instead of clicking through each record.

### Keep account codes matching the ledger

Finance. When the chart of accounts changes, list the account codes in Procurify, add the new ones, and rename the old ones so every request is coded the way the books expect.

### Check accounts and currencies before month end

Finance. Review which accounts and currencies are set up in Procurify so that spend in a new region or a new entity can be coded and converted without a last-minute fix.

### Add a location when a site opens

Operations. Create the new office or warehouse as a location in Procurify and set up the departments that will order from it, so staff there can raise requests on day one.

### Onboard a new approver without a ticket

IT. Create the person as a Procurify user, put them in the right department, and check which permission group they belong to, all from the same place you handle the rest of their setup.

## Elaichi vs Zapier MCP vs Composio for Procurify

All three can connect Procurify to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over Procurify tools | Allow or restrict single Procurify tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per Procurify call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect Procurify to Claude?

First, connect Procurify in Elaichi by entering your Procurify app credentials when prompted. There is no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint. Claude can then work with Procurify vendors, departments, locations, account codes, and users on your behalf.

### Does Procurify work with ChatGPT and Cursor as well as Claude?

Yes. Once Procurify is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Procurify once and every client picks it up.

### What can an AI agent actually do with my Procurify data?

An agent connected to Procurify can list and look up vendors, users, locations, departments, account codes, accounts, currencies, and permission groups, and it can create or update vendors, users, locations, departments, and account codes. In practice that means asking for the vendor list, adding a new supplier, setting up a department for a new site, or fixing an account code without opening Procurify. Short, specific asks such as "add a vendor called Northwind Office Supply" work better than long paragraphs.

### Does connecting Procurify give the AI everything in my Procurify account?

No. Every call to Procurify runs as the person who signed in, so the agent sees only the vendors, departments, locations, and users that person could already see in Procurify, and respects their Procurify permission group. Elaichi can narrow that access further, for example to lookups only, but it can never widen it beyond what the person already has.

### Can my team share one Procurify connection?

Yes. One person connects Procurify in Elaichi and shares the connection with a team, and nobody else ever handles the Procurify app credentials. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person who created a vendor or updated a user, not a shared account.

### Can I stop an agent from deleting or changing things in Procurify?

Yes. Restrictions in Elaichi apply per action, so you can allow looking up Procurify vendors and users while blocking creating, updating, or deleting them. A restricted action is left out of the tool list the AI client receives, so it cannot be called no matter how the prompt is worded.

### What happens to a Procurify connection when someone leaves?

Offboarding the person in Elaichi ends their access to Procurify through every AI client at once. If they had shared a Procurify connection with a team, it keeps working for everyone else. If you want Procurify gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client at the same time.

### Does the Procurify MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Procurify is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

### Is Elaichi an alternative to Zapier MCP for Procurify?

Yes. Both let Claude, ChatGPT or Cursor use Procurify. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every Procurify call.

### How is Elaichi different from Composio for Procurify?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to Procurify: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 53 Procurify tools

Every tool below is callable through https://api.elaichi.ai/mcp once Procurify is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Procurify users** (List). List users, filterable by active state, location, role, permission, and pending invite. Returns: id, firstName, lastName, user, email, department, location, profile_image.
- **Create a Procurify user** (Create). Invite one or more new users; the body is an array of users, and each user needs an email. Returns: id, firstName, lastName, user, email, department, location, profile_image.
- **Update a Procurify user by ID** (Update). Update a user by id (full update, PUT). Returns: id, firstName, lastName, user, email, department, location, profile_image. Required: id, email, firstName, lastName, location, department.
- **Delete a Procurify user by ID** (Delete). Deactivate a user by id; Procurify deactivates the user and does not delete it. Returns an empty 204 response on success. Required: id.
- **List all Procurify current user** (List). Get the user account the access token belongs to. Returns: id, uuid, domains, headquarter_logo, systemaccess_cache, approval_delegatee, is_approval_delegatee, department.
- **List all Procurify permissions** (List). List the user permissions that can be granted. Returns: id, codename, tier.
- **List all Procurify permission groups** (List). List the system roles (permission groups). Returns: id, name, user_count, permissions, type, tier.
- **List all Procurify locations** (List). List locations. Returns: id, name, url, logo, currency, phoneOne, fax, email.
- **Create a Procurify location** (Create). Create a location; only users with superuser permission can create locations. Returns: id, name, url, logo, currency, phoneOne, fax, email. Required: name, currency, phoneOne, primary_billing_address, primary_shipping_address, shipping_addresses.
- **Get single Procurify location by ID** (Get). Get a location by id. Returns: id, name, url, logo, currency, phoneOne, fax, email. Required: id.
- **Update a Procurify location by ID** (Update). Replace a location by id (PUT): omitted fields and alternate shipping addresses are overwritten or deactivated, so send the full record. Returns: id, name, url, logo, currency, phoneOne, fax, email. Required: id, name, currency, phoneOne, primary_billing_address, primary_shipping_address, shipping_addresses.
- **List all Procurify departments** (List). List departments. Returns: id, name, branch, external_id, active, punchout_email, is_active_for_account_code, legal_entity.
- **Create a Procurify department** (Create). Create a department. Returns: id, name, branch, external_id, active, punchout_email, is_active_for_account_code. Required: branch, name.
- **Update a Procurify department by ID** (Update). Update a department by id (full update, PUT). Returns: id, name, branch, external_id, active, punchout_email, is_active_for_account_code. Required: id, branch, name.
- **List all Procurify account codes** (List). List account codes (types: 0 assets, 1 liability, 2 expense, 3 income, 4 equity, 5 other). Returns: id, applied_accounts_count, code, code_length, description, account_type, active, parent.
- **Create a Procurify account code** (Create). Create an account code (types: 0 assets, 1 liability, 2 expense, 3 income, 4 equity, 5 other). Returns: id, applied_accounts_count, code, code_length, description, account_type, active, parent. Required: code, description.
- **Update a Procurify account code by ID** (Update). Update an account code by id (full update, PUT). Returns: id, applied_accounts_count, code, code_length, description, account_type, active, parent. Required: id, code, description.
- **List all Procurify accounts** (List). List chart-of-accounts accounts. Returns: id, account_code, department, start_datetime, end_datetime, budget, budget_used_approved, budget_used_purchased.
- **List all Procurify vendors** (List). List vendors, filterable by vendor group, type, and legal entity availability. Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province.
- **Create a Procurify vendor** (Create). Create a vendor (types: 1 other, 2 hidden, 3 preferred, 4 regular, 5 employee, 6 credit card provider). Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: name, email, type, overall_score.
- **Get single Procurify vendor by ID** (Get). Get a vendor by id. Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: id.
- **Update a Procurify vendor by ID** (Update). Update a vendor by id (full update, PUT). Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: id, name, type.
- **Procurify vendors partial update** (Update). Partially update a vendor by id (PATCH): only the fields you send change. Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: id.
- **List all Procurify currencies** (List). List active and inactive currencies. Returns: id, name, description, rate, base, active.
- **List all Procurify catalog bundles** (List). List catalog bundles. Returns: id, name, description, image, active, items, items_count.
- **List all Procurify catalog items** (List). List catalog items. Returns: id, name, image, unitType, pref_vendor, account_code, internalSKU, description.
- **Create a Procurify catalog item** (Create). Create a catalog item. Returns: id, name, image, unitType, pref_vendor, account_code, internalSKU, description. Required: name, currency, custom_fields.
- **Update a Procurify catalog item by ID** (Update). Update a catalog item by id (full update, PUT). Returns: id, name, image, unitType, pref_vendor, account_code, internalSKU, description. Required: id, name, currency, custom_fields.
- **Create a Procurify requisition** (Create). Create a requisition (a purchase request with its line items). Returns: uuid. Required: required_date, location_name, department_name, line_items.
- **List all Procurify global orders** (List). List orders across the organization (statuses: 0 pending, 1 approved, 2 rejected, 3 purchased, 4 cancelled, 5 received, 6 draft). Returns: uuid, status, num, order_number, branch, user, department, currency.
- **List all Procurify global order items** (List). List order items across the organization, with order, purchase order, and receiving filters. Returns: id, name, status, PO, PO_line_num, account, accountCode, active.
- **List all Procurify order items** (List). List order items, with order, purchase order, and receiving filters. Returns: id, name, status, PO, PO_line_num, account, accountCode, active.
- **List all Procurify purchase orders** (List). List purchase orders for a role (purchased or receivable) and a status. Returns: uuid, number, purchaser, procurify_PO, PO_Num, date, buyer_name, buyer_contact. Required: role, status.
- **Get single Procurify purchase order by ID** (Get). Get a purchase order by id, with its items (states: 0 purchased, 1 cancelled, 3 closed, 4 paid, 5 reopened). Returns: uuid, number, purchaser, procurify_PO, PO_Num, date, buyer_name, buyer_contact. Required: id.
- **Update a Procurify purchase order by ID** (Update). Update a purchase order by its Procurify PO number (full update, PUT). Required: id, order_items, buyer_name, buyer_contact, buyer_addressLineOne, buyer_postalCode, buyer_city, buyer_country, buyer_address, receiver_name, receiver_contact, receiver_addressLineOne, receiver_postalCode, receiver_city, receiver_country, receiver_address, promise_date, discount, tax, version.
- **Procurify purchase orders close** (Close). Close a purchase order by its Procurify PO number. Returns: id, uuid, number, PO_Num, date, discount, freight, fulfilment_status. Required: id.
- **Create a Procurify purchase order reopening** (Create). Reopen a closed purchase order by its Procurify PO number. Returns no response body on success. Required: purchase_order_id.
- **List all Procurify purchase order billing history** (List). View the billing history of purchase orders. Returns: id, number, has_unbilled_unreceived_items, items.
- **List all Procurify receipt items** (List). List receipt items (individual receiving actions) for an order item. Returns: id, pass_quantity, fail_quantity, order_item, created_at, is_edited, created_by, total_quantity.
- **Create a Procurify receipt item** (Create). Receive order items within a single purchase order (creates receipt items). Returns: id, pass_quantity, fail_quantity, order_item, created_at, is_edited, created_by, total_quantity. Required: order_item, pass_quantity, fail_quantity.
- **List all Procurify custom fields** (List). List order item custom fields; the ids here are the canonical custom field ids, including on bill line items. Returns: id, name, content_type, default_value, is_required, field_choices, field_type, field_label.
- **Update a Procurify custom field by ID** (Update). Update the dropdown choices of an order item custom field by id. Returns: id, name, content_type, default_value, is_required, field_choices, field_type, field_label. Required: id, name, field_type.
- **List all Procurify bills** (List). List accounts payable bills, filterable by status, dates, vendor, and export state. Returns: id, uuid, status, version, locked, currency, items, vendor.
- **Get single Procurify bill by ID** (Get). Get an accounts payable bill by its UUID. Returns: id, uuid, status, user, vendor, approval_chain, approver, items. Required: id.
- **Create a Procurify bill paid marking** (Create). Mark approved bills that have no payment as paid, with a payment date. Returns: bill_uuids, bill_group_ids, payment_date. Required: bill_uuids, payment_date.
- **List all Procurify ap items** (List). List accounts payable items, billed or unbilled. Returns: id, orderitem, expense, bill, vendor, sku, description, po.
- **List all Procurify company payment methods** (List). List company payment methods (types: 0 other, 1 check, 2 ACH, 3 EFT, 4 wire). Returns: id, name, type, data, currency, gl_code.
- **Create a Procurify company payment method** (Create). Create a company payment method; the data field depends on the type. Returns: id, name, type, data, currency, gl_code. Required: data.
- **List all Procurify vendor payment methods** (List). List vendor payment methods (types: 0 other, 1 check, 2 ACH, 3 EFT, 4 wire). Returns: id, name, vendor, type, data, currency, payment_rail, bank_account_country_code.
- **Create a Procurify vendor payment method** (Create). Create a vendor payment method; the data field depends on the type. Returns: id, name, vendor, type, data, currency, payment_rail, bank_account_country_code. Required: vendor, data.
- ...and 3 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
