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.
- 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
- Create a Personal Access Token in Sally
- Set up the MCP connection in OpenHands
- Alternative: Using the OpenHands SDK
- 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.
- Log in to Sally at app.sally.io.
- Open Settings in the bottom-left of the sidebar.
- In Settings, choose "Integrations". Under "Your personal integrations", click "+ Add integration".
- In the integration drawer, find "Sally MCP" and click "Create Token".
-
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".
- 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.
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.
- 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.
2. Set Up the MCP Connection in OpenHands
- In OpenHands Cloud, click the profile icon in the bottom-left corner.
- In the menu that appears, select MCP.
- Click Add Server in the top right. In the configuration form, fill in the following fields.
- Set Server Type to SHTTP.
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.
- Enter the following URL:
https://app.sally.io/api/v1/McpExternal - In the API Key field, paste the complete Sally token, i.e.
sally_pat_...with prefix. Do not writeBearerin front of it. - Leave Timeout (seconds) at the default value 60.
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.
- 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:
- Return to the start page by clicking the OpenHands logo in the top left.
- Under Start from Scratch, click New Conversation.
- Ask a real Sally question, for example:
"What was discussed at the last meeting?"
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.
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.
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
| Issue | Fix |
|---|---|
| Agent only mentions its built-in tools (Bash, Browser etc.), no Sally tools | Check 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 out | Edit the server entry and increase the Timeout value from 60 to 120 or higher. |
| Sally tools appear but are never called | Check 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.








