Skip to main content

Sally MCP with OpenHands (OpenDevin)

OpenHands (formerly OpenDevin) is an open-source platform for autonomous software agents. The Model Context Protocol (MCP) is an open standard that lets AI tools connect to external data sources. OpenHands supports MCP servers natively, both in OpenHands Cloud and in the Agent SDK. Once connected, agents can query your Sally meetings, summaries, and transcripts as part of automated workflows, for example to gather context from past discussions, compile action items, or feed transcript data into downstream tasks.

For background on the Sally MCP Connector, available tools, and security best practices, see the General Setup Guide.

Prerequisites
  • An OpenHands Cloud account at app.all-hands.dev, or the OpenHands SDK installed locally (pip install openhands-ai).
  • An active Sally user with access to at least one company account.
  • Sally MCP enabled for your company account (admin setting).

Quick Navigation

  1. Create a Personal Access Token in Sally
  2. Set up the MCP connection in OpenHands
  3. Alternative: Using the OpenHands SDK
  4. Troubleshooting

1. Create a Personal Access Token in Sally

A Personal Access Token (PAT) is the credential the OpenHands agent uses to authenticate against the Sally MCP endpoint. You create it once.

  1. Log in to Sally at app.sally.io.
  2. Open Settings in the bottom-left of the sidebar.
Sally sidebar with the Settings entry highlighted in the bottom-left
Open Settings
  1. In Settings, choose "Integrations". Under "Your personal integrations", click "+ Add integration".
Sally sidebar with Integrations selected and the Add integration button highlighted
Open Integrations and add a new one
  1. In the integration drawer, find "Sally MCP" and click "Create Token".
Integration drawer with Sally MCP entry and Create Token button highlighted
Pick Sally MCP
  1. Fill out the "Create new Sally MCP Token" dialog:

    • Name: a label that helps you recognize the token later (e.g. "OpenHands").
    • Expires: choose a lifetime: 30 days, 90 days, 1 year, 2 years, or Never.

    Then click "Create Token".

Create Sally MCP Token dialog with label OpenHands and Expires field
Name the token and pick a lifetime
  1. Sally displays the full token exactly once. Copy it immediately and store it in a password manager or secure secret store. Once you close the dialog, the clear-text value is gone: you cannot view it again, only regenerate it.
Treat the token like a password

The token grants read access to every appointment, recording, and summary your Sally user sees in this company account. Do not paste it into Slack, email, or tickets. Store it in a password manager.

Dialog showing the generated Sally MCP token with a copy button and a warning that the token is shown only once
Copy the token before closing the dialog
  1. Click "Done".

You can return to Settings → Integrations → Sally MCP → "Manage Tokens" at any time to regenerate, revoke, or create additional tokens. Regenerating invalidates the old token immediately, so update it in any client that still uses it.

Sally MCP Tokens manage dialog showing an active token with its prefix, expiry date, regenerate and delete icons
Manage active tokens: regenerate or revoke individually

2. Set Up the MCP Connection in OpenHands

  1. In OpenHands Cloud, click the profile icon in the bottom-left corner.
  2. In the menu that appears, select MCP.
OpenHands Cloud start page with the Account menu open and the MCP entry highlighted
Open the Account menu and select MCP
  1. Click Add Server in the top right. In the configuration form, fill in the following fields.
  2. Set Server Type to SHTTP.
Server Type: SHTTP, not SSE

The dropdown defaults to SSE. Sally uses the newer Streamable HTTP protocol, so you must switch to SHTTP. If you leave it on SSE, the connection will fail.

  1. Enter the following URL:
    https://app.sally.io/api/v1/McpExternal
  2. In the API Key field, paste the complete Sally token, i.e. sally_pat_... with prefix. Do not write Bearer in front of it.
  3. Leave Timeout (seconds) at the default value 60.
Why 60 seconds?

Sally requests typically complete in 1-3 seconds, so the default is more than enough. For very large queries (e.g. long transcripts of multiple meetings), you can increase the value later by editing the server entry via the pencil icon.

  1. Click Add Server.
OpenHands MCP configuration form with Server Type set to SHTTP, the Sally URL entered, API Key filled in, and Timeout at 60
Select SHTTP, enter the Sally URL, paste the token, and click Add Server

OpenHands does not show a success message after saving the server. The entry simply appears in the server list, which only confirms that the configuration was saved, not that the connection actually works. You need to test it in a real conversation:

  1. Return to the start page by clicking the OpenHands logo in the top left.
  2. Under Start from Scratch, click New Conversation.
  3. Ask a real Sally question, for example:

"What was discussed at the last meeting?"

OpenHands conversation showing the query 'What was discussed at the last meeting?' with multiple Find the most recent meeting tool calls in progress
Test the connection with a real meeting question

If the agent calls the Sally tools (search_appointments, get_recordings, get_summary, search_summaries, get_transcription) and returns actual meeting content, the integration is working.

Language model

For the agent to call Sally tools, a language model must be configured under Settings → Language Model (LLM). OpenHands Cloud includes the openhands/minimax-m2.5 model by default, which works out of the box. Stronger models (Claude, GPT) can be added via your own API keys but are not required for Sally calls.


3. Alternative: Using the OpenHands SDK

If you use the OpenHands Agent SDK instead of the Cloud UI, you can pass the Sally MCP config programmatically.

mcp_config = {
"mcpServers": {
"sally": {
"url": "https://app.sally.io/api/v1/McpExternal",
"headers": {
"Authorization": "Bearer sally_pat_PASTE_YOUR_TOKEN_HERE"
}
}
}
}

Replace PASTE_YOUR_TOKEN_HERE with the token from Step 1.

Use environment variables

For production workflows, store the token in an environment variable instead of hard-coding it:

import os

sally_token = os.environ["SALLY_MCP_TOKEN"]

mcp_config = {
"mcpServers": {
"sally": {
"url": "https://app.sally.io/api/v1/McpExternal",
"headers": {
"Authorization": f"Bearer {sally_token}"
}
}
}
}

Then set the variable before running: export SALLY_MCP_TOKEN=sally_pat_abc123...

Pass the config to your agent and run it:

from openhands.sdk import Agent, LLM

llm = LLM(model="anthropic/claude-sonnet-4-20250514")

agent = Agent(
llm=llm,
tools=[],
mcp_config=mcp_config,
)

result = agent.run(
"Search my Sally meetings from the last 14 days about the product roadmap "
"and summarize the key decisions."
)
print(result)

The agent calls search_appointments or search_summaries to find relevant meetings, then uses get_summary or get_transcription to extract details.


4. Troubleshooting

IssueFix
Agent only mentions its built-in tools (Bash, Browser etc.), no Sally toolsCheck the Server Type (must be SHTTP, not SSE). Check the token format: only the raw sally_pat_... value, without a Bearer prefix.
Agent calls a Sally tool but gets "401 Unauthorized"Revoke the token in Sally and create a new one, then edit the server entry in OpenHands via the pencil icon and paste the new token.
Requests time outEdit the server entry and increase the Timeout value from 60 to 120 or higher.
Sally tools appear but are never calledCheck the language model. Weaker models sometimes ignore available tools. Try switching to a stronger model.

For more troubleshooting tips, see the General Setup Guide → Troubleshooting.