使用说明
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) |
许可证
麻省理工学院