# Quick Start

The `arcade_mcp_server` package provides powerful ways to run MCP servers with your Arcade tools.

## Getting Started

### Install

```bash
uv pip install arcade-mcp-server
```


```bash
uv run python -m arcade_mcp_server
```

### Write a tool


```python
from arcade_mcp_server import tool

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

### Run MCP Server

```bash
uv run python -m arcade_mcp_server
```

You should see the following output:

```text
INFO     | 03:32:05 | Auto-discovering tools from current directory
INFO     | 03:32:05 | Found 1 tool(s) in 00_hello_world.py: greet
INFO:     Started server process
INFO:     Waiting for application startup.
INFO     | 03:32:05 | Starting MCP server with HTTP transport on 127.0.0.1:7777
INFO     | 03:32:05 | Starting MCP server: ArcadeMCP
INFO     | 03:32:05 | HTTP session manager started
INFO     | 03:32:05 | MCP server started and ready for connections
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:7777 (Press CTRL+C to quit)
```

View the docs at http://127.0.0.1:7777/docs.

That's it! You've created an MCP server with a tool.

Check out the [CLI](../api/cli.md) for more options and [Clients](../clients/README.md) for how to use the server with different clients like Claude Desktop, Cursor, and VSCode.


## Building MCP Servers

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

```python
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)
```

## `arcade_mcp_server` CLI

The `arcade_mcp_server` CLI is a simple tool for running MCP servers automatically discovering tools, creating a server for you, and running it.

This is primarily used for development, and running mcp servers locally for desktop clients with stdio.

### Auto-Discovery Mode

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

```bash
# Auto-discover @tool decorated functions
python -m arcade_mcp_server

# With stdio transport for Claude Desktop
python -m arcade_mcp_server stdio
```

### Loading Installed Packages

Load specific arcade packages or discover all installed ones:

```bash
# Load a specific arcade package
python -m arcade_mcp_server --tool-package github
python -m arcade_mcp_server -p slack

# Discover all installed arcade packages
python -m arcade_mcp_server --discover-installed

# Show which packages are being loaded
python -m arcade_mcp_server --discover-installed --show-packages
```

### Development Mode

For active development with hot reload:

```bash
# Run with hot reload and debug logging
python -m arcade_mcp_server --reload --debug

# Specify host and port
python -m arcade_mcp_server --host 0.0.0.0 --port 8080

# Load environment variables
python -m arcade_mcp_server --env-file .env
```


## Environment Variables

Configure the server using environment variables:

```bash
# 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:

```bash
python -m arcade_mcp_server --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:
- http://localhost:8000/docs (Swagger UI)
- http://localhost:8000/redoc (ReDoc)
