Letta talks to Agent Update over MCP. The server is https://api.tryagentupdate.com/v1/mcp, the transport is Streamable HTTP, and the credential is one header.
Setup
# pip install letta-client
import os
from letta_client import Letta
client = Letta(base_url="http://localhost:8283")
server = client.mcp_servers.create(
server_name="agent_update",
config={
"mcp_server_type": "streamable_http",
"server_url": "https://api.tryagentupdate.com/v1/mcp",
"auth_header": "Authorization",
"auth_token": f"Bearer {os.environ['AGENT_UPDATE_TOKEN']}",
},
)
for tool in client.mcp_servers.tools.list(server.id):
client.agents.tools.attach(tool.id, agent_id=my_agent.id)Before you file a bug
Registration is server-side, not a local file. ~/.letta/mcp_config.json is dead code: an unreachable parse block sitting behind an unconditional return that maps url to SSE anyway. auth_header plus auth_token, and custom_headers, are mutually exclusive in effect — set custom_headers at all and the token is silently dropped. Letta's own docs show an example combining them; do not copy it. auth_header is required for the token to be stored at all. The Bearer prefix is normalised in both directions, so a bare token and a prefixed one both work. Letta is the one platform that forgives it. {{ AGENT_API_KEY }} templating is the route to per-agent PATs.
Check it worked
Ask the agent to text you. A 401 means the token is wrong, or the word Bearer is in there twice. No tool at all means the transport string is wrong. Both are covered in troubleshooting.
Next
The five tools and their arguments are on the MCP page. The same tools over plain HTTP are on the REST page. Every other tool is on the docs index.