Time MCP Server by PHP
好的,这是使用 PHP 实现的 MCP (Model Context Protocol) 服务器,用于检索时间信息的示例: ```php <?php // 定义 MCP 服务器的地址和端口 $address = 'tcp://127.0.0.1:12345'; // 创建一个 TCP 套接字 $socket = stream_socket_server($address, $errno, $errstr); if (!$socket) { die("Could not create socket: $errstr ($errno)\n"); } echo "MCP Server listening on $address...\n"; while (true) { // 接受客户端连接 $client = stream_socket_accept($socket, -1); if ($client) { echo "Client connected.\n"; // 读取客户端请求 $request = fread($client, 1024); // 处理请求 $response = handleRequest($request); // 发送响应 fwrite($client, $response); // 关闭客户端连接 fclose($client); echo "Client disconnected.\n"; } } fclose($socket); /** * 处理客户端请求并返回响应。 * * @param string $request 客户端请求 * @return string MCP 响应 */ function handleRequest(string $request): string { // 假设请求是简单的 "get_time" if (trim($request) === 'get_time') { $currentTime = date('Y-m-d H:i:s'); $response = "time: " . $currentTime . "\n"; // MCP 响应格式,可以根据需要调整 } else { $response = "error: invalid request\n"; // 错误响应 } return $response; } ?> ``` **代码解释:** 1. **`$address = 'tcp://127.0.0.1:12345';`**: 定义了服务器监听的地址和端口。 `tcp://127.0.0.1` 表示监听本地回环地址,`12345` 是端口号。 你可以根据需要修改这些值。 2. **`$socket = stream_socket_server($address, $errno, $errstr);`**: 使用 `stream_socket_server` 函数创建一个 TCP 套接字服务器。 `$errno` 和 `$errstr` 用于存储错误代码和错误信息,如果套接字创建失败。 3. **`while (true)`**: 进入一个无限循环,等待客户端连接。 4. **`$client = stream_socket_accept($socket, -1);`**: 使用 `stream_socket_accept` 函数接受客户端连接。 `-1` 表示无限期等待连接。 5. **`$request = fread($client, 1024);`**: 从客户端读取请求数据。 `1024` 是读取的最大字节数。 6. **`$response = handleRequest($request);`**: 调用 `handleRequest` 函数处理客户端请求并生成响应。 7. **`fwrite($client, $response);`**: 将响应数据发送给客户端。 8. **`fclose($client);`**: 关闭客户端连接。 9. **`handleRequest(string $request): string`**: 这个函数负责处理客户端请求。 在这个例子中,它检查请求是否为 "get_time"。 如果是,它获取当前时间并将其格式化为 `Y-m-d H:i:s`。 然后,它构建一个 MCP 响应,格式为 `time: <当前时间>\n`。 如果请求无效,它返回一个错误响应。 **如何运行:** 1. 将代码保存为 `mcp_server.php`。 2. 在命令行中运行 `php mcp_server.php`。 3. 服务器将开始监听 `tcp://127.0.0.1:12345`。 **如何测试:** 你可以使用 `telnet` 或 `netcat` 等工具来测试服务器。 * **使用 telnet:** ```bash telnet 127.0.0.1 12345 ``` 连接成功后,输入 `get_time` 并按回车键。 服务器应该返回当前时间。 * **使用 netcat:** ```bash nc 127.0.0.1 12345 ``` 连接成功后,输入 `get_time` 并按回车键。 服务器应该返回当前时间。 **重要注意事项:** * **错误处理:** 这个示例代码只包含基本的错误处理。 在生产环境中,你需要添加更完善的错误处理机制,例如记录错误日志。 * **安全性:** 这个示例代码没有考虑安全性。 在生产环境中,你需要采取安全措施,例如验证客户端身份、防止注入攻击等。 * **MCP 协议:** 这个示例代码只是一个简单的 MCP 服务器的演示。 真正的 MCP 协议可能更复杂,需要根据实际需求进行调整。 你需要定义清晰的请求和响应格式。 * **并发:** 这个示例代码是单线程的,一次只能处理一个客户端连接。 如果需要处理大量并发连接,你需要使用多线程或异步编程。 可以使用 `pcntl_fork` 创建子进程来处理并发连接,或者使用 `ReactPHP` 等异步框架。 * **扩展性:** 这个示例代码只提供了一个简单的 `get_time` 功能。 你可以根据需要添加更多功能,例如获取系统信息、执行命令等。 **更完善的示例 (使用 `pcntl_fork` 实现并发):** ```php <?php // 定义 MCP 服务器的地址和端口 $address = 'tcp://127.0.0.1:12345'; // 创建一个 TCP 套接字 $socket = stream_socket_server($address, $errno, $errstr); if (!$socket) { die("Could not create socket: $errstr ($errno)\n"); } echo "MCP Server listening on $address...\n"; // 设置信号处理函数,防止僵尸进程 pcntl_signal(SIGCHLD, SIG_IGN); while (true) { // 接受客户端连接 $client = stream_socket_accept($socket, -1); if ($client) { // 创建一个子进程来处理客户端连接 $pid = pcntl_fork(); if ($pid == -1) { // Fork 失败 fclose($client); echo "Fork failed.\n"; } elseif ($pid == 0) { // 子进程 fclose($socket); // 子进程不需要监听套接字 echo "Client connected (PID: " . getmypid() . ").\n"; // 读取客户端请求 $request = fread($client, 1024); // 处理请求 $response = handleRequest($request); // 发送响应 fwrite($client, $response); // 关闭客户端连接 fclose($client); echo "Client disconnected (PID: " . getmypid() . ").\n"; exit(0); // 子进程退出 } else { // 父进程 fclose($client); // 父进程不需要客户端套接字 } } } fclose($socket); /** * 处理客户端请求并返回响应。 * * @param string $request 客户端请求 * @return string MCP 响应 */ function handleRequest(string $request): string { // 假设请求是简单的 "get_time" if (trim($request) === 'get_time') { $currentTime = date('Y-m-d H:i:s'); $response = "time: " . $currentTime . "\n"; // MCP 响应格式,可以根据需要调整 } else { $response = "error: invalid request\n"; // 错误响应 } return $response; } ?> ``` 这个并发版本使用 `pcntl_fork` 创建子进程来处理每个客户端连接。 这允许多个客户端同时连接到服务器。 `pcntl_signal(SIGCHLD, SIG_IGN);` 用于忽略子进程结束的信号,防止产生僵尸进程。 记住,这只是一个基本的示例。 你需要根据你的具体需求进行修改和扩展。 在生产环境中使用之前,请务必进行充分的测试和安全审查。
uzulla
README
基于 PHP 的 Time MCP 服务器
这是一个用 PHP 实现的 MCP (模型上下文协议服务器),提供时间和时区转换功能。
该服务器允许 LLM 使用 IANA 时区名称获取当前时间信息并执行时区转换,并自动检测系统时区。
可用工具
-
get_current_time
- 获取特定时区或系统时区的当前时间。- 必需参数:
timezone
(字符串): IANA 时区名称(例如: 'America/New_York'、'Europe/London')
- 必需参数:
-
convert_time
- 在时区之间转换时间。- 必需参数:
source_timezone
(字符串): 原始 IANA 时区名称time
(字符串): 24 小时格式(HH:MM)的时间target_timezone
(字符串): 转换目标的 IANA 时区名称
- 必需参数:
安装
# 克隆本仓库
$ git clone https://github.com/uzulla/mcp-time-php.git
# 使用 Composer 安装
$ cd mcp-time-php
$ composer install
MCP 使用侧的设置
Claude.app 的设置
<details> <summary>直接使用 PHP 执行</summary>
"mcpServers": {
"time": {
"command": "php",
"args": ["/path/to/this/repo/bin/time-server"]
}
}
</details>
Zed 的设置
添加到 Zed 的 settings.json:
<details> <summary>使用 PHP</summary>
"context_servers": {
"mcp-server-time": {
"command": "php",
"args": ["/path/to/this/repo/bin/time-server"]
}
},
</details>
自定义 - 系统时区
默认情况下,服务器会自动检测系统的时区。可以通过在配置的 args
列表中添加参数 --local-timezone
来覆盖它。
例如:
{
"command": "php",
"args": ["/path/to/this/repo/bin/time-server", "--local-timezone=America/New_York"]
}
交互示例
- 获取当前时间:
{
"name": "get_current_time",
"arguments": {
"timezone": "Europe/Warsaw"
}
}
响应:
{
"timezone": "Europe/Warsaw",
"datetime": "2024-01-01T13:00:00+01:00",
"is_dst": false
}
- 时区之间的时间转换:
{
"name": "convert_time",
"arguments": {
"source_timezone": "America/New_York",
"time": "16:30",
"target_timezone": "Asia/Tokyo"
}
}
响应:
{
"source": {
"timezone": "America/New_York",
"datetime": "2024-01-01T16:30:00-05:00",
"is_dst": false
},
"target": {
"timezone": "Asia/Tokyo",
"datetime": "2024-01-02T06:30:00+09:00",
"is_dst": false
},
"time_difference": "+14.0h"
}
调试
可以使用 MCP inspector 来调试服务器:
npx @modelcontextprotocol/inspector ./bin/time-server
开发
项目结构
.
├── bin/ # 可执行脚本
│ └── time-server # 入口点
├── src/ # 源代码
│ ├── Enum/ # 枚举类
│ │ └── TimeTools.php # 时间相关工具枚举
│ ├── Model/ # 数据模型
│ │ ├── TimeConversionResult.php # 时间转换结果模型
│ │ └── TimeResult.php # 时间获取结果模型
│ ├── Service/ # 服务类
│ │ ├── TimeService.php # 时间服务
│ │ └── TimeUtils.php # 时间实用工具
│ └── StdioServer.php # MCP 服务器实现
├── tests/ # 测试代码
│ ├── ServerTest.php # 服务器测试
│ └── TimeServerTest.php # 时间服务器测试
├── composer.json # Composer 配置
├── composer.lock # Composer 锁定文件
├── phpunit.xml # PHPUnit 配置
└── README.md # 此文件
测试
安装 Composer 并设置依赖项:
composer install
运行 PHPUnit 测试:
composer test
Claude 的提问示例
- “现在几点?”(使用系统时区)
- “东京现在几点?”
- “纽约下午 4 点时,伦敦是几点?”
- “将东京时间上午 9:30 转换为纽约时间”
License
This project is licensed under the MIT License.
MIT License
Copyright (c) 2025 Junichi Ishida aka uzulla (zishida@gmail.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
Acknowledgments
This project incorporates and translates portions of the following open-source projects:
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。
mixpanel
连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。