MCP服务器框架

一个基于Passeur构建的MCP服务器框架,支持OAuth 2.1认证,适用于claude.ai、Claude Desktop和Claude Code。

  • by jfim
  • Elixir
  • 本地部署
  • 更新于
在 GitHub 查看 jfim/passeur_demo

使用说明

Passeur Demo

使用以下组件构建的演示MCP服务器 Passeur.以此为起点,使用OAuth 2.1身份验证构建自己的MCP服务器,该身份验证可与claude.ai、claude Desktop和claude Code配合使用。

包含什么

  • 问候 工具——向Greeter GenServer参与者发送一个名字,并以问候语作为响应
  • 文件工具 (通过 passeur-files)--列出、读取、写入、编辑和删除可配置目录中的文件

部署要求

  • 用于OAuth DCR和令牌存储的Postgres。
  • 通过nginx、Caddy、Cloudflare隧道等进行外部SSL终止。
  • Docker,如果你想将其部署为容器

Docker快速入门

# Generate a password hash
docker run --rm -it elixir:1.19-otp-28-slim sh -c \
  'mix local.hex --force && mix eval "IO.puts(Argon2.hash_pwd_salt(\"your_password\"))"'

# Create .env file
cat > .env << 'EOF'
SECRET_KEY_BASE=generate_a_64_char_random_string_here
ADMIN_USERNAME=admin
ADMIN_PASSWORD_HASH=$argon2id$v=19$m=65536,t=3,p=4$your_hash_here
SERVER_URL=https://mcp.your-domain.com
POSTGRES_PASSWORD=your_postgres_password
EOF

# Start
docker compose up -d

您的MCP服务器现在位于 https://mcp.your-domain.com/mcp.

注: 需要HTTPS。在passeur的HTTP端口前使用反向代理(nginx、Caddy、Cloudflare Tunnel)进行SSL终止。

开发设置

mix deps.get
mix ecto.create
mix ecto.migrate -r Passeur.Repo
mix passeur.hash_password  # generate admin password hash, update config/dev.exs
mix run --no-halt

项目结构

lib/
├── passeur_demo/
│   ├── application.ex      # Starts the Greeter GenServer
│   ├── greeter.ex           # GenServer that tracks greeting count
│   ├── mcp_server.ex        # MCP server definition with tools
│   └── tools/
│       └── greet.ex         # Greet tool implementation

定制

该项目旨在进行分叉和修改。以下是如何让它成为你自己的:

删除演示工具

编辑 lib/passeur_demo/mcp_server.ex --删除 component 您不想要的行:

defmodule PasseurDemo.MCPServer do
  use Hermes.Server,
    name: "MyServer",
    version: "0.1.0",
    capabilities: [:tools]

  # Remove these:
  # component PasseurDemo.Tools.Greet
  # component PasseurFiles.Tools.ListFiles
  # ...

  # Add your own:
  component MyApp.Tools.MyTool

  @impl true
  def init(_client_info, frame), do: {:ok, frame}
end

如果删除所有passeur_files工具,请同时删除 {:passeur_files, ...} 从 mix.exs 和那个 config :passeur_files 配置中的行。

添加自己的工具

在下创建新模块 lib/passeur_demo/tools/:

defmodule PasseurDemo.Tools.MyTool do
  @moduledoc "Description shown to the LLM"

  use Hermes.Server.Component, type: :tool

  schema do
    field :input, {:required, :string}, description: "What this parameter does"
  end

  @impl true
  def execute(%{input: input}, frame) do
    result = do_something(input)

    {:reply,
     Hermes.Server.Response.tool()
     |> Hermes.Server.Response.text(result),
     frame}
  end
end

然后添加 component PasseurDemo.Tools.MyTool 连接到您的MCP服务器模块。

使用第三方工具包

将它们作为依赖项添加到 mix.exs 并注册其组件:

# mix.exs
{:some_mcp_tools, "~> 0.1"}

# mcp_server.ex
component SomeMCPTools.Tools.CoolTool

环境变量

变量 必填 描述
DATABASE_URL 是 Postgres连接URL
SECRET_KEY_BASE 是 64+个字符的随机字符串
ADMIN_USERNAME 是 管理员登录用户名
ADMIN_PASSWORD_HASH 是 Argon2哈希
SERVER_URL 是 公共HTTPS URL
VAULT_PATH 是 文件工具目录
PORT 无 HTTP端口(默认值:4000)
POOL_SIZE 无 数据库池大小(默认值:10)

许可证

麻省理工学院