
Get a Unily audience by its alias.
Search Unily audiences by text, aliases, type, and repository, with paging. You must provide at least one of searchtext, aliases, or repositoryid. Returns matching audiences and a total count.
Get a Unily dynamic audience (including its filter rules) by alias.
Create or update a Unily dynamic audience by alias. Requires a name and filter rules (each with field, comparisonOperator, values, and nested filters). The alias must start with a letter and contain only letters, numbers, and underscores.
Delete a Unily dynamic audience by alias.
Get a Unily content node by its unique identifier (GUID). Returns the content with its properties. Set includedescendants to also return child content. Use querycontent to find content IDs.
Search Unily content with a Lucene query and pagination. Returns matching content items and a paging token for the next page. Example querytext: '+nodeTypeAlias:News'. Pass pagingtoken from page_info to fetch the next page.
Create a new Unily content node. Requires a uniqueid (GUID) to assign, a name, the documenttypealias, the parentunique_id, and properties matching the document type. Date/time properties take {"date":"YYYY-MM-DD HH:MM:SS","timeZone":"..."}; multilingual fields take {"values":{"en-GB":"..."}}.
Create or replace a Unily content node by uniqueid (GUID) using a full PUT. Requires parentuniqueid and the full set of properties. Use patchcontent to change only a few properties. Date/time properties take an object: {"date":"YYYY-MM-DD HH:MM:SS","timeZone":"..."}.
Partially update a Unily content node by uniqueid (GUID). Updates only the supplied properties and fields. Use updatecontent for a full replacement. Date/time properties take an object: {"date":"YYYY-MM-DD HH:MM:SS","timeZone":"..."}.
Delete a Unily content node by uniqueid (GUID). All child content is deleted too. Use querycontent to find the unique_id.
Create new Unily content by copying a predefined template. Requires the templateid, the parentid to create under, and a name for the new content. Returns the new content's ID and tree path.
List the content a Unily user follows, with search and offset pagination (skip/take).
Make a Unily user follow a content item, by userid and contentid.
Make a Unily user unfollow a content item, by userid and contentid.
List the users a Unily user follows, with search and offset pagination (skip/take).
Make a Unily user follow another user, by userid and followeduser_id.
Make a Unily user unfollow another user, by userid and followeduser_id.
List Unily form submissions. Requires a scope ('Approvals', 'MySubmissions', or 'AllSubmissions'). Filter by formids, approvalstate, free-text match, and page with skip/limit.
Get a Unily form submission by its submission ID.
Delete a Unily form submission by its submission ID.
Update the approval status of a Unily form submission. State is one of None, PendingApproval, Approved, or Rejected. Optionally include a message.
Get a Unily media node by unique identifier (GUID). Set include_descendants to also return child media.
Get a Unily media image by unique identifier (GUID), including file metadata and focal point.
Get a Unily media folder by unique identifier (GUID).
List a Unily user's tray notifications with offset pagination. Filter by 'since' date and page with skip/take.
Post a Unily notification to users or audiences. The message must include the instance's default system language (commonly 'en-US'). Provide at least one recipient via userrecipients (emails), userrecipientids (integer user IDs), and/or audiencerecipients (aliases). icon/types cannot be combined with identifier.
Delete a single Unily notification for a user by userid and notificationid.
List all organisations registered in the Unily instance.
Get a Unily organisation by its unique ID (GUID).
Run a GraphQL search against Unily content. Provide a GraphQL query string and optional variables, operationname, and languagecode. Returns the raw GraphQL response. Requires the search feature to be enabled.
List all Unily security groups (static, dynamic, and external).
Get a Unily static security group by its unique ID (GUID), including its members.
Get a Unily dynamic security group by its unique ID (GUID), including its configuration.
List all Unily security roles and their permissions.
Get a Unily security role by its unique ID (GUID).
Get a Unily social comment by its comment ID.
Create a Unily social comment. Requires authoruniqueid and type ('Comment' or 'Share'). Set contentuniqueid to the content/channel and reply_to to nest a reply. Requires the Unily Social feature to be enabled.
Update a Unily social comment by commentid. Requires authoruniqueid and type ('Comment' or 'Share'). Use getcomment to inspect the comment first.
Delete a Unily social comment by its comment ID.
List Unily social reaction types (e.g. Like). Filter by applicabledocumenttypes (comma-separated aliases) or by contentid, and by socialmessagesenabled. applicabledocumenttypes and contentid cannot be combined.
List all Unily document (content) types. Optionally pass iso_code for translated names.
Get a Unily document type by alias. Optionally pass iso_code for translated names.
List Unily data types. Optionally filter by name.
Get a Unily data type by its unique identifier (GUID).
List all Unily user types and their property definitions.
Get a Unily user type by its alias.
List the languages configured in the Unily instance.
List Unily users with pagination. Returns users and a paging token for the next page. Use orderby/direction to sort. Pass pagingtoken from page_info to fetch the next page.
Get a Unily user by unique identifier (GUID). Use listusers or queryusers to find IDs.
Search Unily users with a Lucene query and pagination. Returns matching users and a paging token. Pass pagingtoken from pageinfo to fetch the next page.
Create a new Unily user. Requires name, loginname, and usertypealias. Optionally set email, a uniqueid (GUID), and properties matching the user type.
Update a Unily user's properties by uniqueid (GUID). Only supplied fields and properties are changed. Use getuser to find the unique_id.
Delete a Unily user by uniqueid (GUID). Use getuser to confirm the user first.
Validate Unily credentials by making a test API call. Returns success status and a message. Use this to confirm the subdomain, client ID, and client secret are correct and the app has access.

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}It's an MCP server that lets your agents access content and functionality from a Unily intranet via tools. Your agents can invoke these tools to search knowledge content, retrieve pages, publish announcements, look up people in the directory, and more.
Unily doesn't offer an MCP server purpose built for Unily, but you can use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
search_content: searches the intranet for pages and documents matching a query. Useful for agents that answer employee questions from internal knowledgeget_page: returns the content of a specific page. Call this when an agent needs the full text of a known articlelist_announcements: returns recent announcements and their audiences. Good for workflows that summarize what's new across the organizationcreate_announcement: publishes an announcement to a target audience. Use this when an agent distributes an approved internal messageget_user: returns a person's directory profile and role. Helpful when an agent needs to identify the owner of a process or teamlist_spaces: returns the sites or spaces in the intranet. Useful for agents that need to scope a search or post to the right areaThere are several reasons to use Merge Agent Handler's Unily MCP server rather than building or using an alternative:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Unily and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Unily data directly. The first time you use a Unily tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Unily MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Yes, Merge for Workforce lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Unily without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Merge and gets individual credentials tied to their identity. An employee can ask their AI to find a policy, summarize a recent announcement, or look up who owns a process, all within the permissions IT has defined.
IT also provisions access by role or group via SCIM. An internal communications manager, for example, gets Unily access to publish announcements, Google Drive to source supporting documents, and Slack to notify teams; while an HR coordinator gets Unily access to update policy pages, Workday to verify employee details, and Gmail to follow up with staff.
Every tool call an employee's AI makes to Unily is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now