Documentation Index
Fetch the complete documentation index at: https://docs.upsonic.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Configure authentication for MCP servers that require credentials.
Usage
from upsonic import Task, Agent
from upsonic.tools.mcp import MCPHandler
# MCP server with authentication
auth_handler = MCPHandler(
command="npx -y @company/private-mcp-server",
env={
"API_KEY": "your_api_key_here",
"API_SECRET": "your_api_secret_here",
"AUTH_TOKEN": "bearer_token_here"
},
timeout_seconds=60
)
# Multiple servers with different auth
github_handler = MCPHandler(
command="npx -y @modelcontextprotocol/server-github",
env={
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxx"
},
timeout_seconds=60
)
slack_handler = MCPHandler(
command="uvx mcp-server-slack",
env={
"SLACK_BOT_TOKEN": "xoxb-xxxxx",
"SLACK_TEAM_ID": "T1234567"
},
timeout_seconds=60
)
# Create task with authenticated tools
task = Task(
description="Fetch the latest open issues from the repository 'my-project/repo' using the GitHub tool, then send a summary of these issues to the '#dev-team' channel on Slack.",
tools=[github_handler, slack_handler]
)
# Create agent
agent = Agent(
name="Integration Agent",
model="anthropic/claude-sonnet-4-5"
)
# Execute
result = agent.print_do(task)
print("Result:", result)
Parameters
command (str): Command string to run MCP server
url (str): URL for SSE or Streamable HTTP transport
env (Dict[str, str]): Dictionary of environment variables for authentication
- Common keys:
API_KEY, API_SECRET, AUTH_TOKEN, ACCESS_TOKEN
- Service-specific keys:
GITHUB_PERSONAL_ACCESS_TOKEN, SLACK_BOT_TOKEN, etc.
timeout_seconds (int): Connection timeout in seconds (default: 5)
Best Practices
- Store credentials securely (use environment variables or secrets management)
- Never hardcode credentials in source code
- Use separate credentials for development and production
- Rotate credentials regularly
- Follow the principle of least privilege
Example with Environment Variables
import os
from upsonic import Task, Agent
from upsonic.tools.mcp import MCPHandler
# Load from environment
secure_handler = MCPHandler(
command="npx -y @company/mcp-server",
env={
"API_KEY": os.getenv("MCP_API_KEY"),
"API_SECRET": os.getenv("MCP_API_SECRET")
},
timeout_seconds=60
)
task = Task(
description="Connect to the secure company MCP server and retrieve the latest confidential report.",
tools=[secure_handler]
)
agent = Agent(name="Secure Agent", model="anthropic/claude-sonnet-4-5")
result = agent.print_do(task)
print("Result:", result)
SSE Server Authentication
Use SSEClientParams to pass authentication headers to an SSE MCP server:
from upsonic import Task, Agent
from upsonic.tools.mcp import MCPHandler
# SSE server with authentication
sse_handler = MCPHandler(
url="https://mcp-server.com/sse",
timeout_seconds=60
)
task = Task(
description="Connect to the real-time SSE MCP server and listen for the latest status updates.",
tools=[sse_handler]
)
agent = Agent(name="SSE Agent", model="anthropic/claude-sonnet-4-5")
result = agent.print_do(task)
print("Result:", result)
Streamable HTTP Authentication
Use StreamableHTTPClientParams to pass authentication headers to a Streamable HTTP MCP server:
from datetime import timedelta
from upsonic import Task, Agent
from upsonic.tools.mcp import MCPHandler, StreamableHTTPClientParams
http_handler = MCPHandler(
server_params=StreamableHTTPClientParams(
url="https://mcp-server.com/mcp",
headers={"Authorization": "Bearer your-api-token"},
timeout=timedelta(seconds=30),
sse_read_timeout=timedelta(seconds=120)
),
timeout_seconds=60
)
task = Task(
description="Connect to the authenticated HTTP MCP server and retrieve the latest data.",
tools=[http_handler]
)
agent = Agent(name="HTTP Agent", model="anthropic/claude-sonnet-4-5")
result = agent.print_do(task)
print("Result:", result)
Troubleshooting Authentication
Common authentication issues:
- Invalid credentials: Verify tokens and keys are correct
- Expired tokens: Refresh or regenerate authentication tokens
- Permission errors: Ensure credentials have required scopes/permissions
- Network errors: Check firewall and proxy settings for authenticated connections