README.md

# Vancouver

Vancouver makes it easy to add [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) functionality to your Phoenix/Bandit server. Vancouver handles initialization, request validation, and offers helper functions to simplify the creation of MCP tools. 

## Getting started

### 1. Add dependency

In `mix.exs`:

```elixir
defp deps do
  [
    {:vancouver, "~> 0.1"}
  ]
end
```

### 2. Create your tools

```elixir
defmodule MyApp.Tools.CalculateSum do
  use Vancouver.Tool

  def name, do: "calculate_sum"
  def description, do: "Add two numbers together"

  def input_schema do
    %{
      "type" => "object",
      "properties" => %{
        "a" => %{"type" => "number"},
        "b" => %{"type" => "number"}
      },
      "required" => ["a", "b"]
    }
  end

  def run(conn, %{"a" => a, "b" => b}) do
    send_text(conn, "#{a + b}")
  end
end
```

### 3. Add config

In `config.ex`:

```elixir
config :vancouver,
  name: "My MCP Server",
  version: "1.0.0",
  tools: [
    MyApp.Tools.CalculateSum
  ]
```

### 4. Add your MCP route

In `router.ex`:

```elixir
forward "/mcp", Vancouver.Router
```

### 5. (Optional) Add to your MCP client

E.g. For Claude Desktop, you can modify your config `Settings -> Developer -> Edit config` as follows:

    {
        "mcpServers": {
            "MyApp": {
                "command": "npx",
                "args": [
                    "mcp-remote",
                    "http://localhost:4000/mcp"
                ]
            }
        }
    }

Run your server, and restart Claude to starting using your MCP tools. 🚀

## FAQ

### Does Vancouver support all parts of the Model Context Protocol specification?

Not yet. Vancouver currently supports:

- streamable HTTP transport
- tools
- sync responses (no streaming)
- single messages (no batching)

However, the library is simple enough that you should be able to modify it for your needs.

For more info on the protocol itself, see the [MCP User Guide](https://modelcontextprotocol.io/introduction).

### Is Vancouver stable / ready for production?

No. This library is in early development. Expect breaking changes.

### Why is this library called Vancouver?

Vancouver is the natural home of MCP (Mountain, Coffee, and Phoenix).