
Write HTML. Render video. Built for agents.
Vancouver adds Model Context Protocol support to Phoenix/Bandit servers. It gives you helpers for defining tools and prompts, then wires them into an MCP route with request handling and validation.
Builders who want to add MCP tools and prompts to an Elixir app.
You can turn a Phoenix app into an MCP server without hand-building the protocol plumbing.
`use Vancouver.Tool` lets you define a tool name, description, input schema, and `run/2` handler.
`use Vancouver.Prompt` lets you define prompt names, arguments, and a `run/2` handler that returns prompt text.
`Vancouver.Router` mounts MCP endpoints in your Phoenix router with lists of tools and prompts.
The library handles initialization and request validation for MCP calls.
The README shows how to point Claude Desktop at the MCP route through `mcp-remote`.
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.
In mix.exs:
defp deps do
[
{:vancouver, "~> 0.3"}
]
end
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
In config.ex:
config :vancouver,
name: "My MCP Server",
version: "1.0.0"
In router.ex:
forward "/mcp", Vancouver.Router,
tools: [MyApp.Tools.CalculateSum],
prompts: [MyApp.Prompts.CodeReview]
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. ๐
Not yet. Vancouver currently supports:
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.
No. This library is in early development. Expect breaking changes.
Vancouver is the natural home of MCP (Mountain, Coffee, and Phoenix).
Sign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Write HTML. Render video. Built for agents.
Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps
SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents โ swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.
A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.
๐ท๏ธ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!