
List comments on a workflow's activity feed (newest activity, author, mentions). Use listworkflows to find the workflowid; feed a comment's id to getworkflowcomment or as createworkflowcomment's reply target.
Post a comment on a workflow's activity feed. @-mention a user as <@john.doe@example.com>. The author is the user the token belongs to. Use listworkflows to find the workflowid.
Retrieve one comment on a workflow by ID. Use listworkflowcomments to find comment IDs.
Get the record-type catalog and property schema for the Ironclad repository — the valid type values and properties keys that createrecord and updaterecord require. Call this before writing records.
List Ironclad repository records, filterable by record type, free-text search, last-updated time and formula filter, with sort controls. Use this to find the recordid that getrecord/updaterecord/deleterecord take. Page with pageinfo.nextpage as page.
Retrieve one repository record by ID — type, properties, attachments, links, contract status. Use list_records to find IDs.
Create a repository record (a contract file with metadata properties). Get valid type and properties keys from getrecordsmetadata first. Returns the created record — chain its id into getrecord/updaterecord.
Patch a record — rename, retype, add/overwrite or remove properties (addProperties/removeProperties keyed by property ID from getrecordsmetadata). Use listrecords to find the recordid. For a full replacement use replace_record.
Replace a record's writable fields wholesale (PUT semantics — the property map is replaced, not merged). Prefer updaterecord for partial edits. Use listrecords to find the record_id.
Permanently delete a repository record. Use listrecords to find the recordid.
Validate the Ironclad access token by listing workflow schemas (the cheapest authenticated read; requires public.workflows.readSchemas).
List Ironclad webhook subscriptions — event lists, target URLs and enabled/disabled status. Use this to find the webhookid that getwebhook/updatewebhook/deletewebhook take.
Retrieve one webhook subscription by ID. Use list_webhooks to find IDs.
Subscribe a target URL to Ironclad events, e.g. events=['workflowlaunched'] or ['*'] for all (not recommended at high volume). Returns the created webhook — chain its id into getwebhook/updatewebhook/deletewebhook.
Update a webhook's events, target URL or enabled/disabled status. Use listwebhooks to find the webhookid.
Delete a webhook subscription. Use listwebhooks to find the webhookid.
Get Ironclad's public key (PEM) for verifying signatures on inbound webhook payloads at your target URL.
List Ironclad workflow templates (launch forms). The returned id is the template createworkflow requires, and each schema's attributeschema object defines the attribute keys its launch attributes map takes.
Retrieve one workflow template by ID, including its full attribute schema. Use listworkflowschemas to find IDs.
List Ironclad workflows, filterable by status, template, free-text search, formula filter and last-updated time. Use this to find the workflowid that getworkflow, updateworkflowattributes and the comment/approval/participant tools take. Page with pageinfo.nextpage as page.
Retrieve one workflow by ID — step, status, attributes, creator, record links. Use listworkflows to find IDs; for approvers use getworkflowapprovals, for roster use listworkflow_participants.
Launch a new Ironclad workflow from a template. Discover the template ID and required attributes keys with listworkflowschemas / getworkflowschema first, and match each value to the schema's typed shape. Attach drafts with draftfiles (staged file references), or pass attributes.draft=[{"url":"https://..."}]. Returns the launched workflow — chain its id into getworkflow or the comment tools.
Patch attributes on an in-flight workflow (set/remove values by attribute ID — the path key on each update). Attribute IDs come from the schema's attributeschema — use getworkflowschema or listworkflowschemas. Use listworkflows to find the workflow_id.
Get a workflow's approval state — approval groups, reviewer statuses and role assignments. Use listworkflows to find the workflowid.
List the users participating on a workflow (userId + email). Use listworkflows to find the workflowid.
List a workflow's turn history — who held the pen (internal vs counterparty) and when. Use listworkflows to find the workflowid.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now