MCP ExplorerExplorer

Vancouver

@jameslongon 19 days ago
1 MIT
FreeCommunity
AI Systems
#mcp#mcp-server
Simple MCP server library for Elixir.

Overview

What is Vancouver

Vancouver is a simple library for adding Model Context Protocol (MCP) functionality to Elixir applications, particularly for Phoenix and Bandit servers.

Use cases

Use cases for Vancouver include building tools for mathematical calculations, data processing, and any other functionalities that require MCP support in Elixir applications.

How to use

To use Vancouver, add it as a dependency in your mix.exs file, create your MCP tools by defining modules that use Vancouver.Tool, configure your server settings in config.ex, and set up the MCP route in your router.

Key features

Key features of Vancouver include initialization handling, request validation, helper functions for tool creation, and support for streamable HTTP transport and synchronous responses.

Where to use

Vancouver can be used in web applications built with Elixir, especially those utilizing the Phoenix framework or Bandit for handling HTTP requests.

Content

CI
Hex.pm
Hexdocs.pm
Hex.pm
Hex.pm

Vancouver

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

Getting started

1. Add dependency

In mix.exs:

defp deps do
  [
    {:vancouver, "~> 0.3"}
  ]
end

2. Create your tools/prompts

You can implement tools like this:

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

And prompts like this:

defmodule MyApp.Prompts.CodeReview do
  use Vancouver.Prompt

  def name, do: "code_review"
  def description, do: "Asks the LLM to analyze code quality and suggest improvements"

  def arguments do
    [
      %{
        "name" => "code",
        "description" => "The code to review",
        "required" => true
      }
    ]
  end

  def run(conn, %{"code" => code}) do
    send_text(conn, "Please review this code: #{code}")
  end
end

3. Add config

In config.ex:

config :vancouver,
  name: "My MCP Server",
  version: "1.0.0"

4. Add your MCP route

In router.ex:

forward "/mcp", Vancouver.Router, 
  tools: [MyApp.Tools.CalculateSum],
  prompts: [MyApp.Prompts.CodeReview]

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:

  • tools
  • prompts
  • sync responses (no streaming)

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.

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).

Tools

No tools

Comments