arcade-mcp/libs/arcade-mcp-server/docs/getting-started/quickstart.md
Eric Gustin 9e4d36b8e3
Local MCP Fixes and Address General Feedback (#586)
# Release Candidate 2
## This PR:
- [x] No more confusing 307 redirect logs when using `/mcp` instead of
`/mcp/` (requested by @shubcodes)
- [x] Fix bug in `arcade configure` for Python < 3.12 (reported by
@evantahler
- [x] Fix bug where tools with unsatisfied secret requirements could
still be executed (reported by @evantahler, @shubcodes)
- [x] Auth providers can now be imported via `from
arcade_mcp_server.auth import Reddit` (requested by @shubcodes)
- [x] Add complete E2E oauth flow for tool calls with informational
errors about how to log into arcade and where to go to authorize
(requested by @evantahler, @shubcodes)
- [x] Add OAuth tool in `arcade new`'s generated server (requested by
@shubcodes)
- [x] Standardize on defaulting to running servers on port 8000
- [x] Improve credentials.yaml reading logic
- [x] CLI user friendliness (requested by @Spartee)
- [x] Remove `arcade serve` CLI command
- [x] Fix race condition in `arcade logout`
- [x] Update docs for desired developer onboarding flow

## Next PRs:
- Get `arcade deploy` working for MCP servers. (Command is hidden for
now)
- Rename all occurrences of `toolkit` to `server`/`tools` and rename all
occurrences of `worker` to `server`
2025-09-29 16:00:47 -07:00

5.8 KiB

Quick Start

The arcade_mcp_server package provides powerful ways to run MCP servers with your Arcade tools. While you can use the server library directly, we recommend using the Arcade CLI for a streamlined development experience.

1. Install the CLI

uv pip install arcade-mcp

The arcade-mcp package includes both the CLI tools and the arcade-mcp-server library.

2. Create a New Server

Start with a pre-configured server that includes example tools:

arcade new my_server
cd my_server

This creates a starter MCP server with three example tools:

  • Simple tool - A basic greeting function
  • Secret-based tool - Demonstrates using environment secrets
  • OAuth tool - Shows user authentication flow (requires arcade login)

3. Run Your Server

# Run HTTP server (default, great for development)
arcade mcp

# Or run stdio server (for Claude Desktop, Cursor, etc.)
arcade mcp stdio

You should see output like:

DEBUG    | 11:43:11 | arcade_mcp_server.mcp_app:169 | Added tool: greet
INFO     | 11:43:11 | arcade_mcp_server.mcp_app:211 | Starting server v1.0.0 with 3 tools
INFO:     Started server process [89481]
INFO:     Waiting for application startup.
INFO     | 11:43:12 | arcade_mcp_server.worker:69 | MCP server started and ready for connections
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

View your server's API docs at http://127.0.0.1:8000/docs.

4. Configure MCP Clients

Connect your server to AI assistants:

# Configure Claude Desktop
arcade configure claude --from-local

# Configure Cursor IDE
arcade configure cursor --from-local

# Configure VS Code
arcade configure vscode --from-local

That's it! Your MCP server is running and connected to your AI assistant.

Alternative: Direct Python Approach

If you prefer to use the library directly without the CLI, you can install just the server package:

uv pip install arcade-mcp-server

Write a Tool

from arcade_mcp_server import tool
from typing import Annotated

@tool
def greet(name: Annotated[str, "The name to greet"]) -> Annotated[str, "The greeting"]:
    return f"Hello, {name}!"

Run the Server

You can run the server directly with Python:

# Using the module directly
python -m arcade_mcp_server

# Or if you have a server.py file with MCPApp
python server.py

Note: While this approach works, we recommend using arcade mcp for a better development experience with features like easy client configuration and starter templates.

Building MCP Servers

The simplest way to create an MCP server programmatically is using MCPApp, which provides a FastAPI-like interface:

from arcade_mcp_server import MCPApp
from typing import Annotated

app = MCPApp(
    name="my-tools",
    version="1.0.0",
    instructions="Custom MCP server with specialized tools"
)

@app.tool
def calculate(
    expression: Annotated[str, "Mathematical expression to evaluate"]
) -> Annotated[float, "The result of the calculation"]:
    """Safely evaluate a mathematical expression."""
    # Safe evaluation logic here
    return eval(expression, {"__builtins__": {}}, {})

@app.tool
def fetch_data(
    url: Annotated[str, "URL to fetch data from"]
) -> Annotated[dict, "The fetched data"]:
    """Fetch data from an API endpoint."""
    import requests
    return requests.get(url).json()

# Run the server
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080, reload=True)

Using the arcade mcp Command

The arcade mcp command provides a simple interface for running MCP servers. It automatically discovers tools, creates a server, and runs it with your chosen transport.

Auto-Discovery Mode

The simplest way to run is to let the server discover tools in your current directory:

# Auto-discover @tool decorated functions
arcade mcp

# With stdio transport for Claude Desktop
arcade mcp stdio

Loading Installed Packages

Load specific arcade packages or discover all installed ones:

# Load a specific arcade package
arcade mcp --tool-package github
arcade mcp -p slack

# Discover all installed arcade packages
arcade mcp --discover-installed

# Show which packages are being loaded
arcade mcp --discover-installed --show-packages

Development Mode

For active development with hot reload:

# Run with hot reload and debug logging
arcade mcp --reload --debug

# Specify host and port
arcade mcp --host 0.0.0.0 --port 8000

# Load environment variables
arcade mcp --env-file .env

Environment Variables

Configure the server using environment variables:

# Server settings
MCP_SERVER_NAME="My MCP Server"
MCP_SERVER_VERSION="1.0.0"

# Arcade integration
ARCADE_API_KEY="your-api-key"
ARCADE_API_URL="https://api.arcade.dev"
ARCADE_USER_ID="user@example.com"

# Development settings
ARCADE_AUTH_DISABLED=true
MCP_DEBUG=true

# Tool secrets (available to tools via context)
MY_API_KEY="secret-value"
DATABASE_URL="postgresql://..."

Development Tips

Hot Reload

Use --reload --debug for development to automatically restart on code changes:

arcade mcp --reload --debug

Logging

  • Use --debug for verbose logging
  • In stdio mode, logs go to stderr
  • In HTTP mode, logs go to stdout

Testing Tools

With HTTP transport and debug mode, access API documentation at:

Next Steps