Frankfurter 是一个有用的API,用于获取最新的货币汇率、历史数据或由欧洲中央银行等来源发布的时间序列。如果你需要通过模型上下文协议(MCP)暴露的语言模型代理工具来访问Frankfurter API,那么你需要使用Frankfurter MCP。
如果你的目标是使用此MCP服务器上的工具,请参阅下面的客户端子部分。
你克隆此仓库所在的目录将在此后称为工作目录或WD。
安装 just 来管理项目任务。
安装 uv。要在虚拟环境中安装项目及其最小依赖项,请在WD中运行 just install。要安装所有非必要依赖项(这些依赖项对于开发和测试是必需的),请运行 just install-all。
以下是一些可以用来配置应用程序的环境变量列表。在文件 .env.template 中提供了一个环境变量模板。请注意,下表中列出的默认值并不总是与 .env.template 文件中的相同。
可以指定以下环境变量,并以 FASTMCP_ 为前缀:HOST、PORT、DEBUG 和 LOG_LEVEL。有关 FastMCP 的全局配置选项,请参见 此处。请注意,作为环境变量指定的以 on_duplicate_ 开头的选项 将被忽略。
底层的HTTP客户端也尊重一些环境变量,如 HTTPX库 所述。此外,还可以配置 SSL_CERT_FILE 和 SSL_CERT_DIR 来使用托管API端点或中间HTTP(S)代理服务器的自签名证书。
Frankfurter MCP 将缓存对 Frankfurter API 的调用以提高性能。缓存采用两种不同的策略。对于响应不会因某些参数而改变的API调用(例如,历史汇率查询),使用最近最少使用(LRU)缓存。对于响应会变化的API调用(例如,最新汇率查询),使用生存时间(TTL)缓存,默认生存时间为15分钟。可以通过环境变量调整缓存参数,如下所示。
| 变量 | 默认值及描述 |
|---|---|
LOG_LEVEL | [INFO] 日志级别。更改此级别也会影响可能使用同一环境变量的其他依赖库的日志输出。有效值请参见 Python日志文档。 |
HTTPX_TIMEOUT | [5.0] 底层HTTP客户端等待Frankfurter API响应的时间,单位为秒。 |
HTTPX_VERIFY_SSL | [True] 如果您正在使用带有自签名证书的代理服务器,可以将此变量设置为False以关闭SSL证书验证。然而,建议不要将此变量设置为False:相反,使用 SSL_CERT_FILE 和 SSL_CERT_DIR 变量正确配置自签名证书。 |
FAST_MCP_HOST | [localhost] 此变量指定了MCP服务器必须绑定到哪个主机,除非服务器传输(见下文)设置为 stdio。 |
FAST_MCP_PORT | [8000] 此变量指定了MCP服务器必须监听哪个端口,除非服务器传输(见下文)设置为 stdio。 |
MCP_SERVER_TRANSPORT | [stdio] 可接受的选项有 stdio、sse 或 streamable-http。然而,在 .env.template 中,默认值设置为 stdio。 |
MCP_SERVER_INCLUDE_METADATA_IN_RESPONSE | [True] 这指定了是否在每个工具调用返回的数据中包含额外的元数据。例如,额外的元数据将包括用于获取响应的Frankfurter服务器的API URL等。 |
FRANKFURTER_API_URL | [https://api.frankfurter.dev/v1] 如果您正在 自行托管Frankfurter API,应将此变量更改为您的部署的API端点地址。 |
LRU_CACHE_MAX_SIZE | [1024] 最近最少使用(LRU)缓存的最大大小。 |
TTL_CACHE_MAX_SIZE | [256] 生存时间(TTL)缓存的最大大小。 |
TTL_CACHE_TTL_SECONDS | [900] 生存时间(TTL)缓存的时间限制,单位为秒。 |
以下子部分说明了如何运行Frankfurter MCP服务器以及如何从MCP客户端访问它。
在运行服务器时,您可以选择使用 stdio 传输或HTTP选项(sse 或更新的 streamable-http)。
使用默认设置和 MCP_SERVER_TRANSPORT 设置为 sse 或 streamable-http,MCP端点将通过HTTP在 http://localhost:8000/sse(对于Server Sent Events (SSE)传输)或 http://localhost:8000/mcp(对于可流式传输的HTTP传输)上可用。
如果您想使用 stdio 传输和默认参数运行Frankfurter MCP,请在不使用 .env.template 文件的情况下执行以下命令。
uv 的服务器可选:将 .env.template 文件复制到WD中的 .env 文件中,以便修改上述环境变量,如果想要使用任何不同于默认设置的设置。或者,您可以在shell中导出您希望修改的环境变量。
在WD中运行以下命令以启动MCP服务器。
uv run frankfurtermcp
pip 从PyPI包安装的服务器使用 pip 在虚拟环境中添加此包(可能由 uv、pyenv 或 conda 管理),然后通过运行以下命令启动服务器。
可选:如果您希望修改上述环境变量的默认值,可以添加一个包含 .env.template 文件内容的 .env 文件。或者,您可以在shell中导出您希望修改的环境变量。
pip install frankfurtermcp
python -m frankfurtermcp.server
此仓库提供了两个Dockerfile。
local.dockerfile 用于容器化Frankfurter MCP服务器。smithery.dockerfile 用于部署到 Smithery AI,您不必使用它。要构建镜像、创建容器并启动它,请在WD中运行以下命令。如果您喜欢,可以选择较短的镜像和容器名称。
如果您在 .env.template 中更改了端口(除了8000以外的任何端口),请记得在以下命令中更改端口号引用。您可以使用 -e 选项传递单个环境变量,而不是使用 --env-file 选项传递所有环境变量。
docker build -t frankfurtermcp -f local.dockerfile .
docker create -p 8000:8000/tcp --env-file .env.template --expose 8000 --name frankfurtermcp-container frankfurtermcp
docker start frankfurtermcp-container
成功构建和启动容器后,MCP服务器将通过HTTP在 http://localhost:8000/sse(对于Server Sent Events (SSE)传输)或 http://localhost:8000/mcp(对于可流式传输的HTTP传输)上可用。
目前可用的云托管选项如下:
本子部分解释了客户端连接和测试FrankfurterMCP服务器的方法。
MCP Inspector 是一个官方的Model Context Protocol工具,开发人员可以使用它来测试和调试MCP服务器。这是探索MCP服务器最全面的方式。
要使用它,您必须安装Node.js。安装和管理 node 以及诸如MCP Inspector之类的包的最佳方式是使用 Node Version Manager(或 nvm)。一旦安装了 nvm,您可以通过执行以下操作来安装并使用最新长期支持版本的 node。
nvm install --lts
nvm use --lts
接下来(安装并)运行MCP Inspector,通过在WD中执行以下操作。
npx @modelcontextprotocol/inspector uv run frankfurtermcp
这将在端口6274上创建一个带有身份验证令牌的本地URL,您可以将其复制并在浏览器中浏览。进入MCP Inspector UI后,点击 Connect 连接到MCP服务器。之后,您可以探索服务器上可用的工具。
您可以使用以下命令行与系统(如Claude Desktop、Visual Studio Code等)配合使用 stdio 传输运行服务器。
{
"command": "uv",
"args": [
"run",
"frankfurtermcp"
]
}
在 args 列表中的最后一个项目不是 frankfurtermcp 而是脚本的完整路径,例如 WD/.venv/bin/frankfurtermcp。同样,您可以使用以下JSON配置,将路径适当地替换为 python3.12,例如 WD/.venv/bin/python3.12。
{
"command": "python3.12",
"args": [
"-m",
"frankfurtermcp.server"
]
}
FrankfurterMCP具有以下MCP功能。
下表列出了由FrankfurterMCP服务器公开的工具名称。这里显示的描述是为了文档目的,可能与实际通过模型上下文协议公开的描述有所不同。
| 名称 | 描述 |
|---|---|
get_supported_currencies | 获取Frankfurter API支持的货币列表。 |
get_latest_exchange_rates | 获取特定货币相对于给定基础货币的最新汇率。 |
convert_currency_latest | 使用最新汇率将一种货币的金额转换为另一种货币。 |
get_historical_exchange_rates | 获取特定日期或日期范围内特定货币相对于给定基础货币的历史汇率。 |
convert_currency_specific_date | 使用特定日期的汇率将一种货币的金额转换为另一种货币。 |
每个工具的必填和可选参数未在此表中列出,但可通过协议提供给MCP客户端。
安装 prek。然后通过在WD中运行以下命令启用 prek。
prek install
欢迎提交拉取请求。对于重大变更,请先打开一个问题讨论您想要更改的内容。
要运行提供的测试用例,请执行以下操作。向命令添加标志 --capture=tee-sys 以显示进一步的控制台输出。
uv run --group test pytest tests/
通过执行 just test-coverage 运行所有测试并生成覆盖率报告。如果运行了所有测试,生成的覆盖率报告可能如下所示。
Name Stmts Miss Cover
----------------------------------------------------
src/frankfurtermcp/__init__.py 10 0 100%
src/frankfurtermcp/common.py 23 0 100%
src/frankfurtermcp/mixin.py 52 4 92%
src/frankfurtermcp/model.py 17 0 100%
src/frankfurtermcp/server.py 111 20 82%
tests/__init__.py 0 0 100%
tests/test_data_models.py 60 0 100%
tests/test_server.py 71 0 100%
----------------------------------------------------
TOTAL 344 24 93%
MIT。
以下是关于项目状态的一些更新。请注意,这些并不对应于具体的提交或里程碑。
| 日期 | 状态 | 备注或观察 |
|---|---|---|
| 2025年11月21日 | 活跃 | 新工具使用 prek(代替 pre-commit)、ty(代替 mypy)和 just。 |
| 2025年9月6日 | 活跃 | 代码重构和清理。 |
| 2025年6月27日 | 活跃 | 成功在Glama.AI和Smithery.AI上进行远程部署。 |
| 2025年6月9日 | 活跃 | 添加容器化,支持自签名代理。 |
| 2025年6月7日 | 活跃 | 项目开始。添加工具以涵盖Frankfurter API的所有功能。 |