关于 Frédérick Madore — Academic Record
这是用于查询 Frédérick Madore 学术记录的 MCP 服务,适合查阅其研究成果的研究者和读者。它提供出版物、演讲、研究项目、数字人文工作和履历的搜索及完整记录,并可生成引文。
主要功能
- 01按类型、主题、地区、语言和年份搜索出版物
- 02获取出版物和演讲的完整记录
- 03浏览研究项目和数字人文项目
- 04搜索活动条目并读取全文
- 05获取履历章节和引文格式
适用场景
- 01查找特定主题或地区的出版物
- 02查看演讲议程和参与者
- 03追踪项目关联的出版物和田野工作
- 04生成 BibTeX 或纯文本引文
MCP 相关
向 MCP 客户端提供十二种工具和七份 API 文档资源,支持 stdio 与 Streamable HTTP,并从网站读取已发布的 JSON 文档。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
website-mcp
一个用于访问 frederickmadore.com 上发布的学术记录的 MCP 服务。将它连接到 Claude(或任何 MCP 客户端),即可询问有关出版物、演讲、研究项目、数字人文工作和简历的问题,无需逐一浏览查找。
本服务不涵盖什么。 本服务涵盖的是 Frédérick Madore _本人的_学术研究。他研究的西非来源档案由 IWAC MCP 服务提供。两者的语料库不同——如果两者都需要,就都连接。
安装(Claude Desktop)
从最新版本下载 frederickmadore-website.mcpb,然后双击。Claude Desktop 会打开安装对话框;点击“安装”即可。整个过程就是这么简单——无需编辑配置文件,无需使用终端,也无需安装 Node,因为 Claude Desktop 自带运行时。
Claude Desktop 会提示发布者未经验证。这是正常且不会改变的——请参阅为什么这个安装包未签名。
每次提交也会构建该安装包:打开 Actions 中最新的运行记录,如果想获取尚未发布的构建版本,请下载 mcpb 工件。要自行构建,请参阅下方的命令。
扩展的配置面板中有一个可选设置 Site address。除非要基于尚未发布的内容进行开发,否则请留空。
检查是否可用
提问:“Frédérick Madore 发表过哪些关于校园宗教活动的研究?”
安装(其他客户端)
任何支持通过 stdio 使用 MCP 的客户端都可以直接运行该服务。此方式使用开发者构建版本,因此需要 Node 20 或更高版本。
git clone https://github.com/fmadore/Website.git
cd Website
npm install # also builds the server
Claude Code:
claude mcp add frederickmadore -- node /absolute/path/to/Website/mcp/dist/index.js
任何读取 mcpServers JSON 的客户端:
{
"mcpServers": {
"frederickmadore": {
"command": "node",
"args": ["/absolute/path/to/Website/mcp/dist/index.js"]
}
}
}
工具
| 工具 | 功能 |
|---|---|
search_publications | 搜索书籍、文章、章节、报告和论文。可按类型、标签、国家、项目、语言和年份范围筛选。 |
get_publication | 获取一篇出版物的完整信息——摘要、DOI/ISBN/ISSN、目录、引用作品和已发表的评论。 |
search_communications | 搜索会议论文、演讲、研讨会、工作坊、专题讨论会和播客。 |
get_communication | 获取一场演讲的完整信息,包括专题讨论会的议程和参与者。 |
search_activities | 搜索新闻和活动条目,并匹配其完整正文。 |
get_activity | 获取一项活动的完整信息,包括其完整正文。 |
list_research_projects | 列出所有研究项目,每个项目均列出其出版物、演讲、资助和田野调查的 ID。 |
get_research_project | 获取一个项目的完整信息:完整叙述、时间跨度、地区、源语言、资助和交叉引用。 |
list_dh_projects | 列出数字档案、数据集和工具,以及相关技能、奖项和评论。 |
get_dh_project | 获取一个数字人文项目的完整信息。 |
get_cv | 获取职业履历。也可指定一个部分(grants、teaching、awards 等)。 |
get_citation | 获取 BibTeX 格式或纯文本参考文献。 |
搜索不区分重音符号,因此,cote d'ivoire 可以匹配 Côte d'Ivoire。type 和
country 必须匹配完整值(Niger 不会匹配 Nigeria,article 也不会匹配
bulletin-article);tag、project 和 language 则可匹配其中任意部分。
搜索结果支持使用 limit 和 offset 分页,每个工具都会返回易读的文本块和通过架构验证的结构化内容。
网站通过 WebMCP(src/lib/utils/webmcp.ts)也为访问网站的 Agent 注册了相同的十二个工具。
两者通过 src/lib/utils/api*.ts 中相同的加载器、搜索和引文代码读取相同的 API 文档,因此二者不会出现偏差。
搜索会返回标题;get_* 工具会返回完整记录。每个数据集都包含完整文本——出版物和演讲摘要、活动正文、项目描述以及研究叙述——因此网站上的内容既可搜索,也都可阅读。
资源
相同的七份 API 文档也作为 MCP 资源公开在 website://api/ 下:
发现清单、研究、出版物、交流活动、活动、数字人文项目和职业履历。对于带筛选条件的问题,工具是高效的途径;
资源则是完整且可通过 URI 寻址的数据集,适合希望直接访问数据层的客户端。
工作原理
服务通过 HTTP 读取网站已发布的 JSON 文档(/api/*.json),并将通过验证的响应保存在内存中五分钟。并发请求共享一次获取操作,失败的请求可以重试。这里没有数据库、没有搜索索引,也没有自己的数据:语料只有几百条记录,因此线性扫描比避免扫描所需的机制更省成本。缓存过期后的下一个请求会获取新内容。
WEBSITE_API_TIMEOUT_MS 限制整个获取操作的时长,包括响应正文(默认值为 10,000 ms)。WEBSITE_API_CACHE_TTL_MS 设置缓存有效期(默认值为 300,000 ms)。两者都接受毫秒值:超时时长必须为正数;TTL 为零时会禁用持久缓存。与 API 不兼容的版本和格式错误的文档会在缓存前被拒绝。
服务使用稳定版 TypeScript SDK v2。serveStdio() 和 createMcpHandler() 由同一个服务工厂提供服务,支持无状态的 2026-07-28 协议和 2025 年前后的旧版客户端,因此不同传输方式下的工具和资源接口不会出现分歧。现代版 tools/list、resources/list 和 resources/read 响应会声明一小时的公共缓存提示。
Streamable HTTP
在本地构建并运行无状态远程端点:
npm run mcp:build
npm run start:http -w mcp
MCP 端点为 http://localhost:7860/mcp;/ 和 /healthz 会返回一份简短的健康状态文档。本地运行时绑定到 127.0.0.1。在容器或公共托管环境中,请有意设置 MCP_BIND_HOST=0.0.0.0;存在 SPACE_HOST 时,Hugging Face Spaces 会自动选择此设置。PORT 和 WEBSITE_API_BASE 仍可配置。
Host 和 Origin 防护使用 SDK 验证器。回环主机名和 SPACE_HOST 受信任;可以通过 ALLOWED_HOSTS 和 ALLOWED_ORIGIN_HOSTS 分别添加以逗号分隔的主机名(不含协议或端口)。Origin 策略基于主机名;受信任主机上的端口不受限制。没有 Origin 的原生客户端会被接受;不受信任、格式错误及为 null 的 Origin 会被拒绝。
转发标头不会覆盖这些防护;请配置代理实际使用的 Host。
这里不会重新实现 get_citation——构建会将 #lib 设置为别名,并打包网站自身的 bibtexGenerator 和 citationFormatter,因此返回的 BibTeX 与网站下载按钮生成的内容逐字节相同。这里只提供 BibTeX 和纯文本参考文献,因为这是网站本身仅有的生成格式;如果要添加 APA/MLA/Chicago 格式,只需修改 src/lib/utils,之后这些格式就会自动在此提供。
针对未发布内容进行开发
将服务指向本地构建,而不是线上网站:
npm run build # at the repo root, produces build/api/*.json
npm run preview # serves it on :4173
WEBSITE_API_BASE=http://localhost:4173 node mcp/dist/index.js
命令
| 命令 | 作用 |
|---|---|
npm run mcp:build | 在 mcp/dist/ 中构建 stdio、HTTP 和共享服务包 |
npm run mcp:pack | 构建可安装的 mcp/dist/frederickmadore-website.mcpb |
npm run mcp:check | 进行类型检查 |
npm run mcp:smoke | 构建两者,然后针对网站的本地构建,通过协议分别驱动它们 |
npm test | 单元测试(搜索和排序),与网站的测试套件一起运行 |
npm run mcp:smoke 需要先在仓库根目录运行 npm run build。它会测试开发构建,以及从 .mcpb 中解包出来的服务——也就是用户实际安装的构件,并通过无状态 Streamable HTTP 驱动同一个工厂。现代和旧版协议时期均在测试范围内。CI 会在每个拉取请求中运行全部测试,因此重命名 API 字段、工具注册损坏或构件无法启动等问题都会被发现。
发布
推送一个标签,或依次选择 Actions → Release MCP bundle → Run workflow:
git tag mcp-v0.3.0 && git push origin mcp-v0.3.0
工作流会进行类型检查、构建站点、构建程序包并使用真实 API 文档进行冒烟测试,只有全部完成后才会将其发布为发行版资源。未能启动的内容不会发布。
发布到 MCP Registry
server.json 是服务器在官方 MCP Registry(预览版)中的条目,名称为 io.github.fmadore/frederickmadore-website。Registry 仅存储元数据:该条目指向发行版中的 .mcpb,并记录其 SHA-256,客户端会在安装前进行检查。已提交的文件描述的是最新发行版 0.3.0。
哈希必须与上传文件的哈希一致。程序包是带有构建时间戳的 zip,因此,在本地重新构建同一提交得到的哈希会不同。因此,发行工作流会为其发布的程序包生成 server.json(scripts/release/stamp-mcp-registry.mjs),并将其附加到同一发行版。发布仍需手动进行,并且需要以 fmadore 身份登录 GitHub:
-
按上述步骤发布,然后获取该发行版的条目(此处为
0.3.0):gh release download mcp-v0.3.0 --repo fmadore/Website --pattern server.json --dir mcp --clobber若要重新发布
0.3.0,请跳过此步骤:已提交的文件就是该发行版的条目。 -
从 Registry 的发行版页面安装
mcp-publisher(快速入门指南提供了各平台的一行安装命令,包括 ARM 版 Windows)。 -
在
mcp/中检查条目、登录并发布:mcp-publisher validate mcp-publisher login github mcp-publisher publishvalidate会将文件发送到 Registry 的验证端点;login github会打开 GitHub 设备授权流程;publish会读取./server.json。login存储的 Registry 令牌会在几分钟内过期,因此请紧接着运行publish;如果出现401 … token is expired,请重新登录。 -
确认条目,然后提交获取到的
server.json,以便仓库记录已发布的内容:curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.fmadore/frederickmadore-website"
npm test 会根据 Registry 的限制检查已提交的条目(scripts/release/mcp-registry.test.mjs)。之后可以通过 mcp-publisher login github-oidc 在 release-mcp.yml 中运行此步骤,这需要 id-token: write,且无需存储密钥。
为什么程序包未签名
Claude Desktop 会警告发布者未经验证。这是有意为之,不会改变。
mcpb 通过调用操作系统信任存储来验证签名——在 macOS 上使用 security verify-cert -p codeSign,在 Windows 上使用对应的 PowerShell 命令——因此只有由受认可 CA 颁发的证书才能消除警告。这类证书需要每年付费,并且必须验证你的身份;本项目不会购买证书。
mcpb sign --self-signed 并非解决办法。无法链接到受信任证书的证书会被验证为 unsigned,因此文件只会增大约 2 KB,没有其他变化——Claude Desktop 也一样,因为它使用相同的验证代码。诚实地发布未签名程序包,好过使用加载器会忽略的签名。
构建 bundle 的方式
pack.mjs 会将所有依赖内联到一个压缩后的文件中(无需随包发布 node_modules/),
目标运行时为 Node 20,而非 24,因为 Claude Desktop 会提供运行时,并写入一个将输出标记为 ESM 的
package.json。清单中的工具列表并非手动编写:脚本会启动刚构建好的服务,通过协议询问它有哪些工具,
然后写入结果。手动维护的列表是第二个事实来源,一旦工具重命名就会出现偏差。
归档文件由 fflate 直接写入,而不是通过 @anthropic-ai/mcpb CLI。该 CLI 打包时恰好使用此调用——
级别为 9 的 zipSync,并在外部属性中设置 Unix 模式位——但它还会引入 @inquirer/prompts 来提供交互式的
init 向导,连带引入一个带有两项尚未修复的高危安全公告的 tmp。这里没有任何操作会运行 init,
因此要为一次 zipSync 调用引入 171 个包,并导致 npm audit 失败。对于从固定模板生成的清单,
真正重要的部分是 pack.mjs 中对必填字段所做的简短检查。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。