Connect your AI Agents to Adobe Workfront in minutes

Merge lets you securely connect your agents to Adobe Workfront and thousands of tools instantly

Available tools

list_approval_templates

List the approval templates the user can see, for createapprovalfromtemplate. The API has no server-side filter or paging, so namecontains, limit, and offset are applied after fetching. Needs the Adobe sign-in or server-to-server connection.

get_approval_template

Get one approval template with its stages and default participants. Use listapprovaltemplates to find template IDs. Needs the Adobe sign-in or server-to-server connection.

create_approval_template

Create a reusable document approval template with named stages and default approvers. Use searchusers for user IDs and searchobjects (obj_code 'TEAMOB') for teams. Needs the Adobe sign-in or server-to-server connection.

update_approval_template

Update an approval template's name and stages. The API requires the full name and stage list, so call getapprovaltemplate first and resend what should stay. Use listapprovaltemplates for IDs. Needs the Adobe sign-in or server-to-server connection.

delete_approval_template

Permanently delete an approval template. Approvals already created from it are kept. Use listapprovaltemplates to find template IDs. Needs the Adobe sign-in or server-to-server connection.

get_document_approval

Get the approval on a document version: status, stages, and participants with their decisions. Returns approvalid null when none exists yet. Use getdocument or searchobjects (objcode 'DOCV') for the version ID. Needs the Adobe sign-in or server-to-server connection.

create_document_approval

Start an approval on a document version with one or more stages of approvers/reviewers. Use searchusers for user IDs and searchobjects (objcode 'TEAMOB') for team IDs; use createapprovalfromtemplate to reuse a template. Needs the Adobe sign-in or server-to-server connection.

create_approval_from_template

Apply an approval template to a document version: reads the template, then adds its stages (creating the approval if needed). Use listapprovaltemplates for template IDs and getdocument or searchobjects (obj_code 'DOCV') for the version ID. Needs the Adobe sign-in or server-to-server connection.

replace_approval_stages

Replace the stages of a document version's approval: add, remove, or reorder stages or paths. Unstarted stages left out are deleted; stages already started are kept. Call getdocumentapproval first. Needs the Adobe sign-in or server-to-server connection.

update_approval_stage

Update one approval stage's name, deadline, participants, or rules. Send the full participant list. Use getdocumentapproval for stage IDs and search_users for user IDs. Needs the Adobe sign-in or server-to-server connection.

delete_approval_stage

Delete one stage that has not started yet (e.g. a later stage waiting on another) from a document version's approval. Use getdocumentapproval for stage IDs and statuses; use deletedocumentapproval to remove it all. Needs the Adobe sign-in or server-to-server connection.

delete_document_approval

Delete the whole approval (every stage, participant, and decision) from a document version. Use getdocumentapproval to confirm it exists; use deleteapprovalstage to remove one stage instead. Needs the Adobe sign-in or server-to-server connection.

add_approval_participants

Add approvers or reviewers to an existing approval. Set stageid (from getdocumentapproval) on each for multi-stage approvals. Use searchusers for user IDs and searchobjects (objcode 'TEAMOB') for teams. Needs the Adobe sign-in or server-to-server connection.

remove_approval_participant

Remove a user or team from a document version's approval. Removing the last participant deletes the approval (deleted=true). Use getdocumentapproval to see participants. Needs the Adobe sign-in or server-to-server connection.

remind_approval_participant

Send a reminder to one approval participant. Pass stageid to remind them about a specific stage (uses the stage-scoped endpoint). Use getdocument_approval for participant and stage IDs. Needs the Adobe sign-in or server-to-server connection.

remind_undecided_participants

Send reminders to every participant who has not decided yet on a document version's approval, or only on one stage when stageid is given (from getdocument_approval). Needs the Adobe sign-in or server-to-server connection.

list_comments

List the comments on a project, task, issue, or document (objcode + objectid), or search comments across objects with filters (e.g. ownerID), replies included (parentNoteID marks a reply), with sorting and paging. Returns comment IDs for replies, updates, and likes.

count_comments

Count the comments on a project, task, issue, or document, or across objects with filters, without fetching them.

get_comment

Get one comment by ID, with its text, author, and thread. Use list_comments to find IDs.

create_comment

Post a comment on a project, task, issue, or document (objcode + objectid from the matching list tool), or reply to one by setting parentcommentid from list_comments. Returns the new comment ID.

update_comment

Replace a comment's text. Use list_comments to find the ID; only the author can edit.

delete_comment

Permanently delete a comment. Use list_comments to find the ID.

like_comment

Like a comment as the signed-in user. Use listcomments to find the ID; undo with unlikecomment.

unlike_comment

Remove the signed-in user's like from a comment. Use list_comments to find the ID.

list_object_types

List every Workfront object type with its code (PROJ, TASK, OPTASK, PORT, PRGM, TMPL, DOCV, HOURT, ...). Use the codes with getobjectmetadata and the generic searchobjects/getobject/create_object tools.

get_object_metadata

Get an object type's schema: field names and types, references and collections (for 'owner:name' style field paths), searchable fields, and actions. Call this before any create/update or runobjectaction to find valid field and action names.

search_objects

Search any Workfront object type (portfolios, programs, templates, document versions, hour types, teams, groups, ...) with Workfront filters, sorting, and paging. Use listobjecttypes for codes. Projects, tasks, issues, hours, users, documents, comments, and custom forms have dedicated list tools.

count_objects

Count Workfront objects of any type that match filters, without fetching them — e.g. how many current projects or overdue tasks. Use listobjecttypes for codes and count_comments for comments.

report_objects

Group and aggregate Workfront objects server-side — e.g. hours summed per project, or project counts per status. Use listobjecttypes for codes and getobjectmetadata for groupable field names.

get_object

Get one Workfront object of any type by ID, with chosen fields (e.g. 'name,owner:name,DE:Region'). Use search_objects to find IDs. Projects, tasks, issues, hours, users, documents, comments, and custom forms have dedicated get tools.

create_object

Create a Workfront object of any type (portfolio, program, company, assignment, ...). Call getobjectmetadata first for required field names. Projects, tasks, issues, hours, and comments have dedicated create tools. Returns the new object's ID.

update_object

Update fields on a Workfront object of any type. Call getobjectmetadata for field names; use search_objects for IDs. Collections passed replace the existing ones. Projects, tasks, issues, hours, and comments have dedicated update tools.

delete_object

Permanently delete a Workfront object of any type by ID. Use search_objects to find IDs; set force=true to remove dependants too. Projects, tasks, issues, hours, documents, and comments have dedicated delete tools.

run_object_action

Run a Workfront action on any object: move a task (projectID), convert an issue to a project or task, assign, mark done, approve/reject/recall an approval, recalculate a timeline. Call getobjectmetadata for the object's action names and arguments.

list_custom_forms

List custom forms, optionally only those for one object type (e.g. 'PROJ'). Call getcustomform next for field names, then pass them as custom_fields on create/update tools (with the form's ID as categoryID).

get_custom_form

Get a custom form's fields: names (use as customfields keys), labels, types, required flags, and dropdown options. Use listcustom_forms to find form IDs.

list_documents

List documents, optionally only those attached to one project, task, or issue (attachedtoobjcode + attachedto_id), or by name. Returns document IDs and currentVersionID, the version ID the document approval tools take.

get_document

Get one document by ID, including its current version (ID, number, file name, type, size). Use listdocuments to find IDs; list every version with searchobjects obj_code 'DOCV' and filter {'documentID': <id>}.

delete_document

Permanently delete a document and all its versions. Use list_documents to find the ID.

list_hours

List logged hours with server-side filters (project, task, issue, user, entry date range) plus any Workfront filter, sorting, and paging. Use reportobjects with objcode 'HOUR' to total hours instead of listing them.

get_hour

Get one hour entry by ID with chosen fields. Use list_hours to find IDs.

create_hour

Log hours against exactly one task (listtasks), issue (listissues), or project (listprojects). Use searchobjects with obj_code 'HOURT' for hour type IDs. Returns the new hour entry ID.

update_hour

Change an hour entry's hours, date, hour type, or note. Use listhours for the ID and searchobjects obj_code 'HOURT' for hour type IDs.

delete_hour

Permanently delete an hour entry. Use list_hours to find the ID.

list_issues

List issues and requests with server-side filters (project, status, priority, type, assignee, name) plus any Workfront filter, sorting, and paging. Use list_projects for project IDs.

get_issue

Get one issue or request by ID with chosen fields. Use list_issues to find IDs.

create_issue

Log an issue or request on a project (projectid from listprojects). Use searchusers for assignee IDs. Returns the new issue ID. To convert it later use runobject_action (convertToTask / convertToProject).

update_issue

Update an issue's name, status, priority, severity, type, assignee, due date, or custom fields. Use list_issues for the ID.

delete_issue

Permanently delete an issue. Use list_issues for the ID; force=true also deletes logged hours.

list_my_work

List the signed-in user's open work — the tasks and issues in their My Work list. Use listtasks or listissues with assignedtoid to page or filter someone else's work.

list_fields

List the fields of a Workfront Planning record type (cursor pagination). Returns the field IDs that record data, searchrecords filters, and views use. Call this before createrecord. Use listrecordtypes for the record type ID. Needs the Adobe sign-in or server-to-server connection.

get_field

Get one Workfront Planning field, including its type, select options, and type settings. Use list_fields to find the ID. Needs the Adobe sign-in or server-to-server connection.

create_field

Add a field to a Workfront Planning record type (listrecordtypes for the ID). Date, number, percentage, currency, and user fields need their options in field_config; selects need options. Needs the Adobe sign-in or server-to-server connection.

update_field

Change a Workfront Planning field's name, description, select options, or type settings; unset inputs are kept. Use listfields for the ID and getfield to read current options. Needs the Adobe sign-in or server-to-server connection.

delete_field

Delete a Workfront Planning field and its values on every record. Use list_fields to find the ID. Needs the Adobe sign-in or server-to-server connection.

search_records

Search or browse records of a Workfront Planning record type, with filter, sort, grouping, field selection, and page/size paging. Use listrecordtypes for the record type ID and list_fields for field IDs used in filters and data. Needs the Adobe sign-in or server-to-server connection.

get_record

Get one Workfront Planning record with its field values keyed by field ID. Use searchrecords to find the ID and listfields to read the field IDs. Needs the Adobe sign-in or server-to-server connection.

create_record

Create one Workfront Planning record. Call listfields first to get the field IDs for data keys; use listrecordtypes for the record type ID. For many records use bulkrecord_actions. Needs the Adobe sign-in or server-to-server connection.

update_record

Change field values on a Workfront Planning record; fields not given are kept. Use searchrecords for the record ID and listfields for the field IDs. Needs the Adobe sign-in or server-to-server connection.

delete_record

Delete one Workfront Planning record. Use searchrecords to find the ID; for many records use bulkrecord_actions with action 'delete'. Needs the Adobe sign-in or server-to-server connection.

bulk_record_actions

Create, update (replace data), patch (change given fields), or delete up to 100 Workfront Planning records of one record type in a single call; reports per-item results. Use listrecordtypes, searchrecords, and listfields for IDs. Needs the Adobe sign-in or server-to-server connection.

move_records

Reorder Workfront Planning records by placing them before or after another record. Use listrecordtypes for the record type ID and search_records for record IDs. Needs the Adobe sign-in or server-to-server connection.

get_record_history

List the field change history of a Workfront Planning record (cursor pagination). Use search_records to find the record ID. Needs the Adobe sign-in or server-to-server connection.

list_record_types

List the record types in a Workfront Planning workspace (cursor pagination). Returns the record type IDs that searchrecords, createrecord, listfields, and listviews need. Use list_workspaces for the workspace ID. Needs the Adobe sign-in or server-to-server connection.

get_record_type

Get one Workfront Planning record type. Use listrecordtypes to find the ID; its fields come from list_fields. Needs the Adobe sign-in or server-to-server connection.

create_record_type

Create a record type (e.g. 'Campaign') in a Workfront Planning workspace. Use listworkspaces for the workspace ID; add fields afterwards with createfield. Needs the Adobe sign-in or server-to-server connection.

update_record_type

Change a Workfront Planning record type's name, description, icon, color, or primary field; unset fields are kept. Use listrecordtypes for the ID and list_fields for the primary field ID. Needs the Adobe sign-in or server-to-server connection.

delete_record_type

Permanently delete a Workfront Planning record type and all of its records. Use listrecordtypes to find the ID. To only remove a global record type from one workspace, use detachglobalrecord_type. Needs the Adobe sign-in or server-to-server connection.

list_addable_global_record_types

List global record types a Workfront Planning workspace can use (cursor pagination). Adding one is done in the Workfront UI: the API has no add endpoint. Use list_workspaces for the ID. Needs the Adobe sign-in or server-to-server connection.

detach_global_record_type

Remove a global record type from one Workfront Planning workspace without deleting it. Use listworkspaces and listrecord_types for the IDs. The Planning API has no public endpoint to attach one again. Needs the Adobe sign-in or server-to-server connection.

get_planning_sharing

List who has access to a Workfront Planning workspace, record type, record, view, or field, with each member's role. IDs come from listworkspaces, listrecordtypes, searchrecords, listviews, or listfields. Needs the Adobe sign-in or server-to-server connection.

update_planning_sharing

Grant, change, or revoke access to a Workfront Planning workspace, record type, record, view, or field; for records and fields, also set who else can see them. Use searchusers for user IDs and getplanning_sharing for current members. Needs the Adobe sign-in or server-to-server connection.

list_views

List the saved views (table, timeline, calendar, list, gallery) of a Workfront Planning record type (cursor pagination). Use listrecordtypes for the record type ID. Needs the Adobe sign-in or server-to-server connection.

get_view

Get one Workfront Planning view with its filter, sorting, grouping, and layout settings. Use list_views to find the ID. Needs the Adobe sign-in or server-to-server connection.

create_view

Create a saved view of a Workfront Planning record type. Use listrecordtypes for the record type ID and list_fields for field IDs in filter, sorting, grouping, and timeline metadata. Needs the Adobe sign-in or server-to-server connection.

update_view

Change a Workfront Planning view's name, filter, sorting, grouping, layout, or visibility; unset inputs are kept. Use listviews for the ID and listfields for field IDs. Needs the Adobe sign-in or server-to-server connection.

delete_view

Delete a Workfront Planning view; the records it showed are kept. Use list_views to find the ID. Needs the Adobe sign-in or server-to-server connection.

list_workspaces

List Workfront Planning workspaces with cursor pagination. Returns the workspace IDs that listrecordtypes and createrecordtype need. Needs the Adobe sign-in or server-to-server connection; Workfront API keys cannot call Planning.

get_workspace

Get one Workfront Planning workspace, including its record type sections. Use list_workspaces to find the ID. Needs the Adobe sign-in or server-to-server connection.

create_workspace

Create a Workfront Planning workspace. Returns its ID for createrecordtype. Needs the Adobe sign-in or server-to-server connection; Workfront API keys cannot call Planning.

update_workspace

Change a Workfront Planning workspace's name, description, color, icon, or record type sections; unset fields are kept. Use listworkspaces for the ID and listrecord_types for section record type IDs. Needs the Adobe sign-in or server-to-server connection.

delete_workspace

Permanently delete a Workfront Planning workspace and everything in it. Use list_workspaces to find the ID. Needs the Adobe sign-in or server-to-server connection.

list_projects

List projects with server-side filters (status, owner, portfolio, program, group, name) plus any Workfront filter, sorting, and paging. Returns project IDs for getproject, createtask, and list_tasks.

get_project

Get one project by ID with chosen fields (e.g. 'name,status,owner:name,DE:Budget'). Use list_projects to find IDs.

create_project

Create a project, optionally from a template (templateid via searchobjects objcode 'TMPL'). Use searchusers for owner IDs and listcustomforms/getcustomform for custom fields. Returns the new project ID.

update_project

Update a project's name, status, dates, owner, portfolio/program, or custom fields. Use listprojects for the ID and getobjectmetadata objcode 'PROJ' for other field names.

delete_project

Permanently delete a project. Use listprojects for the ID; force=true also deletes its tasks, issues, and hours. Consider updateproject with status 'DED' instead.

list_tasks

List tasks with server-side filters (project, status, assignee, parent, name) plus any Workfront filter, sorting, and paging. Use listprojects for project IDs. Returns task IDs for gettask and update_task.

get_task

Get one task by ID with chosen fields (e.g. 'name,status,assignments:assignedTo:name'). Use list_tasks to find IDs.

create_task

Create a task in a project (projectid from listprojects). Use searchusers for assignee IDs and listtasks for parent IDs. Returns the new task ID. To move a task later use runobjectaction action 'move'.

update_task

Update a task's name, status, percent complete, dates, assignee, priority, or custom fields. Use listtasks for the ID. Use runobject_action to move it to another project.

delete_task

Permanently delete a task. Use list_tasks for the ID; force=true also deletes subtasks and logged hours.

search_users

Search Workfront users by name, email, active status, or home group, plus any Workfront filter. Returns user IDs for ownerid, assignedto_id, approval participants, and sharing grants.

get_user

Get one user by ID with chosen fields. Use search_users to find IDs.

get_current_user

Get the Workfront user the connection acts as — their ID, name, email, and access level. Use the ID wherever a tool asks for the signed-in user.

validate_credential

Validate the Workfront domain and credentials by reading the signed-in user. Use this to confirm setup before calling other tools.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

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}
11
Copy Code

Open 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}
Copy Code
Copied!

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  }
Copy Code

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}
Copy Code

FAQs on using Merge's Adobe Workfront  MCP server

FAQs on using Merge's Adobe Workfront  MCP server

Explore other MCP servers built and managed by Merge

activecampaign
ActiveCampaign
adobe_experience_manager
Adobe Experience Manager
adobe_pdf_services
Adobe PDF Services
ahrefs
Ahrefs
airtable
Airtable
alphavantage
Alpha Vantage
amadeus
Amadeus
amazon_s3
Amazon S3
amplitude
Amplitude
anaplan
Anaplan
apollo
Apollo
arize
Arize
articulate
Articulate Reach 360
asana
Asana
ashby
Ashby
attio
Attio
avalara
Avalara
aviationstack
Aviationstack
axiom
Axiom
bamboohr
BambooHR
basecamp
Basecamp
biorxiv
bioRxiv
bitbucket
Bitbucket
bitly
Bitly

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now