
List all attachments on a sheet with pagination. Includes file attachments and URL links.
Attach a URL to a sheet. Supported types: LINK, BOXCOM, DROPBOX, EGNYTE, EVERNOTE, GOOGLEDRIVE, ONEDRIVE.
Get attachment details including download URL for file attachments. Use list_attachments to find IDs.
Delete an attachment from a sheet. This cannot be undone. Use list_attachments to find IDs.
List all columns in a sheet with pagination. Returns column IDs, titles, types, and indices.
Add a column to a sheet. Specify title, type, and optional index for position. Use PICKLIST type with options for dropdown columns.
Get a single column by ID. Returns column title, type, options, and other properties.
Update a column's title, type, or position. Use list_columns to find column IDs.
Delete a column from a sheet. This cannot be undone. Cannot delete the primary column.
List all discussions on a sheet with pagination. Includes discussion titles and comment counts.
Create a discussion on a sheet with an initial comment. Optionally provide a title.
Create a discussion on a specific row with an initial comment. Use get_sheet to find row IDs.
Get a discussion with all its comments. Use list_discussions to find valid discussion IDs.
Delete a discussion and all its comments. This cannot be undone.
Add a comment to an existing discussion. Use list_discussions to find discussion IDs.
Update a comment's text. Use get_discussion to find comment IDs.
Delete a comment. This cannot be undone. Use get_discussion to find comment IDs.
List folders at the home level with pagination. Does not include workspace folders.
Create a folder at home, inside another folder, or in a workspace. Set parentfolderid for subfolder, workspace_id for workspace folder.
Get a folder with its contents (sheets, subfolders, reports). Use listhomefolders to find valid IDs.
Update a folder name. Use listhomefolders or get_workspace to find folder IDs.
Permanently delete a folder and all its contents. This cannot be undone.
List all groups in the organization with pagination. Groups can be used for sharing sheets.
Create a new group with optional description and initial members (by email). Requires admin privileges.
Get a group with its members. Use list_groups to find valid group IDs.
Update a group's name or description. Use list_groups to find valid group IDs.
Delete a group. This cannot be undone. Members are not deleted.
Add members to a group by email address. Use get_group to see current members.
Remove a member from a group by user ID. Use get_group to find member user IDs.
List all reports accessible to the user with pagination. Reports aggregate data from multiple sheets.
Add rows to a sheet. Each row has cells with columnid and value. Use totop/tobottom/parentid/sibling_id for positioning.
Get a single row from a sheet by row ID. Use include parameter for additional data like discussions and attachments.
Update existing rows in a sheet. Each row must have id and cells to update. Can also reposition rows with totop/tobottom/parent_id.
Delete rows from a sheet by row IDs. This cannot be undone.
Move rows from one sheet to another. Rows are removed from the source sheet. Use list_sheets to find sheet IDs.
Copy rows from one sheet to another. Original rows remain in the source sheet. Use list_sheets to find sheet IDs.
Search across all sheets, rows, and other objects. Returns matching items with context data and parent references.
Search within a specific sheet. Returns matching rows and cells with context. Use list_sheets to find sheet IDs.
List all shares on a sheet with pagination. Shows who has access and their access level.
Share a sheet with users by email. Set accesslevel to VIEWER, EDITOR, EDITORSHARE, ADMIN, or OWNER.
Update a share's access level. Use listsheetshares to find share IDs.
Remove a share from a sheet. The user will lose access. Use listsheetshares to find share IDs.
List all sheets accessible to the user with pagination. Use page and page_size to navigate results.
Create a new sheet with specified columns. At least one column must have primary=true. Use TEXT_NUMBER type for general text columns.
Get a sheet with its columns and rows. Use include parameter for attachments, discussions, etc. Supports pagination for rows.
Update sheet properties like name. Use list_sheets to find valid sheet IDs.
Permanently delete a sheet. This cannot be undone. Use list_sheets to find valid sheet IDs.
Copy a sheet to home, a workspace, or a folder. Specify destinationtype and destinationid for non-home destinations.
Sort a sheet by one or more columns. Each criterion needs column_id and direction (ASCENDING or DESCENDING).
Get the current authenticated user's profile including email, name, locale, and account info.
List all users in the organization with pagination. Requires admin privileges.
Get a user by ID. Requires admin privileges. Use list_users to find valid user IDs.
Validate Smartsheet API credentials by fetching current user profile. Returns {success, message}.
List all webhooks for the authenticated user with pagination.
Create a webhook to receive callbacks when a sheet changes. Use '.' for events to subscribe to all events.
Get a webhook's details including status, events, and callback URL. Use list_webhooks to find valid IDs.
Update a webhook's enabled status or event subscriptions. Use list_webhooks to find valid IDs.
Delete a webhook. It will stop receiving callbacks. This cannot be undone.
List all workspaces with pagination. Returns workspace IDs, names, and access levels.
Create a new workspace. Workspaces organize sheets, reports, and dashboards.
Get a workspace with its contents (sheets, folders, reports, dashboards). Use list_workspaces to find valid IDs.
Update a workspace name. Use list_workspaces to find valid IDs.
Permanently delete a workspace and all its contents. This cannot be undone.

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 gives your agents access to Smartsheet data and functionality through tools. Your agents can invoke these tools to read and update sheets, add rows, manage discussions, trigger webhooks, and more.
Smartsheet offers their own MCP server, but you can also 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 popular ones:
Here are some of the most commonly-used tools:
get_sheet: retrieves a full Smartsheet sheet including all rows, columns, and cell values. Useful for agents that need a complete snapshot of a project or data tracker before taking actionadd_rows: inserts one or more new rows into a specified sheet. Call this when an agent needs to log a new record, intake request, or event directly into Smartsheet from an external triggerupdate_rows: modifies the cell values of existing rows in a sheet. Good for workflows that keep Smartsheet in sync with status changes happening in other systemssearch_sheet: searches for text within a specific sheet and returns matching rows. Helpful when an agent needs to locate an existing record before deciding whether to create or update itcreate_row_discussion: attaches a discussion thread to a specific row in a sheet. Use this when an agent needs to surface a comment, flag a blocker, or document a decision at the row levelcreate_webhook: registers a webhook on a sheet so that an external system receives notifications when rows change. Call this during agent setup when you need Smartsheet to push updates rather than polling for themHere is why Merge Agent Handler's Smartsheet MCP server is worth using over building your own or relying on an alternative:
get_sheet and list_reports never gets access to delete_rows or delete_sheetYou 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 Smartsheet and complete the OAuth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Smartsheet data directly. The first time you use a Smartsheet tool, a Magic Link may appear to complete connector authentication.
Note: If you want to connect Merge Agent Handler's Smartsheet MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now