内容
# 每日 Obsidian
一个为每日 Obsidian 提供的 [FastMCP](https://gofastmcp.com/) 服务器和插件市场。目前,它公开了 `hello_mcp_world` 提示和只读的 `say_hello_mcp_world` 工具。
该仓库是一个 GitHub 可安装的插件市场,适用于 Codex 和 Claude Code。已安装的插件连接到部署在 `https://dailynotesmcp.vercel.app/mcp` 的 Streamable HTTP 服务器。
## 从 GitHub 安装
### Claude Code
在 Claude Code 中运行以下命令:
```text
/plugin marketplace add MinhTuan2405/dailyobsidian
/plugin install daily-obsidian@daily-obsidian-marketplace
/reload-plugins
```
Claude Code 自动连接到捆绑的远程 `daily-obsidian` MCP 服务器。其工具可在插件 MCP 命名空间下使用。
### Codex
从 Codex CLI 添加 GitHub 市场:
```shell
codex plugin marketplace add MinhTuan2405/dailyobsidian
```
在 ChatGPT 桌面应用程序中,打开 **插件**,选择 **每日 Obsidian**,并从市场安装 `daily-obsidian`。然后,该插件可在桌面应用程序的 Codex 中使用。
对于仅需要 MCP 服务器的 Codex CLI 或 IDE 用户,请将已部署的端点添加到 `~/.codex/config.toml`:
```toml
[mcp_servers.daily-obsidian]
url = "https://dailynotesmcp.vercel.app/mcp"
```
运行 `codex mcp list` 以确认连接。Codex 显示 MCP 工具而非 MCP 提示;要求它使用 `say_hello_mcp_world` 进行问候。
## 项目布局
```text
src/dailynotesmcp/server.py # MCP 组件和 HTTP/STDIO 入口点
.claude-plugin/ # Claude Code 插件和市场清单
.codex-plugin/ # Codex 插件清单
.agents/plugins/marketplace.json # Codex GitHub 市场目录
api/index.py # Vercel 函数入口点
tests/test_server.py # 内存 MCP 合同测试
```
`pyproject.toml` 是运行时、开发、 lint、测试和构建配置的真实来源。依赖项更改时,请始终提交 `uv.lock`。
## 本地开发
要求: [uv](https://docs.astral.sh/uv/) 和 Python 3.12。
```powershell
uv sync --all-groups
uv run dailynotesmcp
```
将 HTTP MCP 客户端连接到 `http://localhost:8000/mcp`。使用 `http://localhost:8000/health` 检查进程。
要在本地运行打包的 STDIO 入口点:
```powershell
uv run dailynotesmcp-stdio
```
## 质量检查
在打开拉取请求之前运行以下命令:
```powershell
uv run ruff check .
uv run pytest
```
GitHub Actions 工作流在拉取请求和推送到 `main` 时运行相同的检查。
## 发布
1. 更新 `pyproject.toml`、`.claude-plugin/plugin.json` 和 `.codex-plugin/plugin.json` 中的版本。
2. 运行质量检查。
3. 提交版本更改,然后创建并推送匹配的标签,例如 `v0.1.1`。
发布工作流验证项目,构建 Python 轮子和源代码分发,并使用这些工件创建 GitHub 发布。插件用户在刷新市场和更新插件后接收到新版本。
## 更新服务器
1. 在 `src/dailynotesmcp/server.py` 中添加提示、工具或资源。使用稳定、描述性的组件名称,因为 MCP 客户端依赖于它们。
2. 在 `tests/` 中为每个公共组件和行为更改添加内存 MCP 客户端测试。
3. 使用 `uv add` 或 `uv add --group dev` 更改依赖项,然后提交 `pyproject.toml` 和 `uv.lock`。
4. 将凭证排除在源代码控制之外。作为 Vercel 环境变量添加它们,并使用 `os.environ` 读取它们。
5. 在公开数据或操作之前添加身份验证。公共 MCP 端点默认不应信任其调用者。
## 部署到 Vercel
1. 推送仓库并在 Vercel 中导入它,或从项目根目录运行 `vercel`。
2. Vercel 从 `pyproject.toml` 安装包并加载 `api/index.py`,它导出了 FastMCP ASGI 应用程序。
3. 使用 `vercel --prod` 部署。
4. 将客户端连接到 `https://<your-project>.vercel.app/mcp` 并验证 `https://<your-project>.vercel.app/health`。
服务器启用了 `stateless_http=True`,这是可靠的无服务器缩放所必需的。Vercel 自动提供 `VERCEL_URL`,服务器使用它进行 FastMCP 主机验证。当使用一个或多个自定义域时,请将 `MCP_ALLOWED_HOSTS` 设置为逗号分隔的列表。
Vercel 适合此无状态提示服务器。在添加长时间运行的工作、持久会话或内存状态之前,请移至始终在线的 ASGI 平台。基于浏览器的 MCP 客户端可能还需要配置的 CORS 来源;请勿使用通配符生产来源。