📝 哈希节点MCP服务器
通过完整的Hashnode集成为您的AI助手充电
   
一个全面的模型上下文协议服务器,将完整的Hashnode GraphQL API公开为MCP工具,实现您的Hashnode博客与兼容MCP的应用程序(如Claude Desktop和Cline)之间的无缝集成。
______________________________________________________________________
✨ 特性
- 📝 21综合工具 -完成Hashnode API覆盖范围
- 🔄 热交换架构 -无需配置即可自动发现工具
- 🎯 类型安全 -采用TypeScript严格模式和Zod验证构建
- 📊 高测试覆盖率 -TDD方法的覆盖率超过95%
- 🚀 零依赖 -占地面积最小,性能最高
- 🔌 集成下降 -适用于Claude Desktop、Cline和其他MCP客户端
- ✍️ 完整的CRUD操作 -阅读、撰写、更新和删除帖子和草稿
- 📅 调度支持 -安排和管理发布后的时间
🛠️ 可用工具
此MCP服务器提供21种工具,涵盖Hashnode API操作的全方位:
📚 出版管理
| 工具 | 说明 |
|---|---|
getPublicationByHost | 按域检索发布信息 |
getPublicationPosts | 从带有分页的出版物中获取帖子 |
📄 岗位操作
| 工具 | 说明 |
|---|---|
getPostBySlug | 按标题获取特定帖子 |
searchPosts | 在出版物中搜索帖子 |
👤 用户操作
| 工具 | 说明 |
|---|---|
getUserByUsername | 检索用户配置文件信息 |
getMe | 获取当前经过身份验证的用户信息 |
getMyDrafts | 检索已验证用户的草稿 |
getMyPosts | 检索已验证用户的已发布帖子 |
✍️ 草稿和发布操作(需要授权)
| 工具 | 说明 |
|---|---|
createDraft | 为出版物创建新草稿 |
updateDraft | 更新现有草稿 |
publishDraft | 发布草稿,使其成为实时帖子 |
createPost | 直接创建和发布帖子 |
updatePost | 更新已发布的现有帖子 |
removePost | 删除/删除已发布的帖子 |
restorePost | 恢复以前删除的帖子 |
📅 计划操作(需要授权)
| 工具 | 说明 |
|---|---|
scheduleDraft | 安排一份草稿以供将来发布 |
rescheduleDraft | 重新安排之前安排的草稿 |
cancelScheduledDraft | 取消预定草稿 |
📖 系列操作
| 工具 | 说明 |
|---|---|
getSeriesBySlug | 通过slug获取系列信息 |
getSeriesPosts | 使用分页从系列中检索帖子 |
addPostToSeries | 向现有系列添加帖子 |
📑 静态页面操作
| 工具 | 说明 |
|---|---|
getStaticPageBySlug | 通过slug获取静态页面 |
📦 安装
Claude Desktop快速入门
添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"hashnode": {
"command": "npx",
"args": ["-y", "hashnode-mcp"]
}
}
}全球安装
npm install -g hashnode-mcp对于Cline(VS代码)
添加到您的Cline MCP设置(cline_mcp_settings.json):
{
"mcpServers": {
"hashnode": {
"command": "npx",
"args": ["-y", "hashnode-mcp"]
}
}
}⚙️ 配置
认证
某些操作需要哈希节点个人访问令牌(PAT)。从获取您的PAT 哈希节点设置.
带环境变量
export HASHNODE_API_TOKEN="your-token-here"与克劳德桌面/Cline
将令牌添加到MCP配置中:
{
"mcpServers": {
"hashnode": {
"command": "npx",
"args": ["-y", "hashnode-mcp"],
"env": {
"HASHNODE_API_TOKEN": "your-token-here"
}
}
}
}需要身份验证的操作:
- ✅ 正在获取经过身份验证的用户信息(
getMe,getMyDrafts,getMyPosts) - ✅ 创建/更新草稿和帖子
- ✅ 发布和日程安排
- ✅ 系列管理
- ✅ 拆除和修复后
🎯 用法示例
获取出版物信息
// MCP clients can invoke:
{
"tool": "getPublicationByHost",
"arguments": {
"host": "blog.hashnode.com"
}
}搜索文章
{
"tool": "searchPosts",
"arguments": {
"publicationId": "your-publication-id",
"query": "GraphQL tutorial",
"first": 10
}
}创建并发布草稿
{
"tool": "createDraft",
"arguments": {
"publicationId": "your-publication-id",
"title": "My New Post",
"contentMarkdown": "# Hello World\n\nThis is my post content."
}
}安排职位
{
"tool": "scheduleDraft",
"arguments": {
"draftId": "your-draft-id",
"authorId": "your-author-id",
"publishAt": "2024-12-31T00:00:00.000Z"
}
}🏗️ 建筑
此服务器使用 热插拔自动加载器 图案:
src/
├── index.ts # Entry point with MCP server setup
├── server.ts # Server creation and tool registration
├── autoloader.ts # Dynamic tool discovery
├── utils/
│ └── graphql-client.ts # GraphQL client with error handling
└── tools/ # Tool implementations
├── publication.ts # Each exports toolDefinitions
├── post.ts
├── user.ts
├── me.ts
├── draft.ts
├── series.ts
└── static-page.ts主要优势:
- 通过将文件放入来添加新工具
src/tools/ - 无需更改服务器代码
- 每个工具都是可独立测试的
- 所有工具的覆盖率超过95%
📚 API 参考
Publication Tools
getPublicationByHost
按主机域检索发布信息。
host(string,必填)-发布的主机域- 返回:具有id、标题、描述和元数据的发布对象
getPublicationPosts
从支持分页的出版物中获取帖子。
publicationId(string,必填)-发布的IDfirst(number,可选,默认值:10)-要获取的帖子数量after(字符串,可选)-分页光标- 返回:带有边缘的PostConnection,用于分页的pageInfo
Post Tools
getPostBySlug
从出版物中按标题获取特定帖子。
publicationHost(string,必填)-发布的主机域slug(字符串,必填)-柱塞- 返回:带有id、title、slug、short、url和内容的Post对象
搜索帖子
在出版物中搜索帖子。
publicationId(string,必填)-发布的IDquery(string,必填)-搜索查询字符串first(number,可选,默认值:10)-要获取的结果数- 返回:SearchPost与匹配帖子的连接
User Tools
获取用户名:
按用户名检索用户信息。
username(string,必填)-用户的用户名- 返回:具有id、用户名、姓名、标语和简介的用户对象
getMe
获取有关当前已验证用户的信息。 需要身份验证。
- 返回:具有id、用户名、姓名、标语和简介的用户对象
获取MyDrafts
检索已验证用户的草稿。 需要身份验证。
first(number,可选,默认值:10)-要提取的草稿数- 返回:DraftConnection带边和pageInfo用于分页
获取我的帖子
检索已验证用户的已发布帖子。 需要身份验证。
first(number,可选,默认值:10)-要获取的帖子数量- 返回:带有边缘的PostConnection和用于分页的pageInfo
Draft & Publishing Tools
本节中的所有工具都需要通过以下方式进行身份验证 HASHNODE_API_TOKEN.
创建草稿
为出版物创建新草稿。
publicationId(string,必填)-发布的IDtitle(string,必填)-草稿的标题contentMarkdown(string,必填)-Markdown格式的内容- 返回:带有id、title和slug的草稿对象
更新草稿
更新现有草稿。
draftId(string,必填)-要更新的草稿的IDtitle(字符串,必填)-更新后的标题contentMarkdown(string,必填)-Markdown中的更新内容- 返回:已更新的草稿对象
发布草稿
发布草稿,使其成为实时帖子。
draftId(string,必填)-要发布的草稿的ID- 返回:带有id、title、slug和url的Published Post对象
createPost
直接创建和发布帖子,而无需先创建草稿。
publicationId(string,必填)-发布的IDtitle(string,必填)-帖子标题contentMarkdown(string,必填)-Markdown格式的内容- 返回:带有id、title、slug和url的Published Post对象
更新帖子
更新现有的已发布帖子。
postId(string,必填)-要更新的帖子的IDtitle(字符串,必填)-更新后的标题contentMarkdown(string,必填)-Markdown中的更新内容- 返回:更新了带有id、title、slug和url的Post对象
删除帖子
删除/删除已发布的帖子。
postId(string,必填)-要删除的帖子的ID- 返回:删除了带有id、title、slug和url的Post对象
恢复
恢复以前删除的帖子。
postId(string,必填)-要还原的帖子的ID- 返回:已还原的Post对象,包含id、title、slug和url
Scheduling Tools
本节中的所有工具都需要通过以下方式进行身份验证 HASHNODE_API_TOKEN.
日程表草稿
安排一份草案以供将来发布。
draftId(string,必填)-要安排的草稿的IDauthorId(string,必填)-安排草稿的作者的IDpublishAt(字符串,必填)-ISO 8601日期时间字符串(例如,“2024-12-31T00:00:00.000Z”)- 返回:具有id和scheduledDate的ScheduledPost对象
重新安排草稿
将之前安排的草稿重新安排到新的日期/时间。
draftId(string,必填)-预定草稿的IDpublishAt(string,必填)-用于发布的新ISO 8601日期时间字符串- 返回:具有id和更新的scheduledDate的ScheduledPost对象
canceled计划草案
取消预定草稿并将其恢复到正常草稿状态。
draftId(string,必填)-要取消的预定汇票的ID- 返回:具有id和scheduledDate的ScheduledPost对象
Series Tools
getSeriesBySlug
从出版物中按slug获取系列信息。
publicationHost(string,必填)-发布的主机域slug(字符串,必填)-该系列的slug- 返回:具有id、name、slug和description的序列对象
getSeries帖子
从支持分页的系列中检索帖子。
publicationHost(string,必填)-发布的主机域seriesSlug(字符串,必填)-该系列的slugfirst(number,可选,默认值:10)-要获取的帖子数量- 返回:SeriesPost带有边和页面信息的连接
Addpostoseries
将帖子添加到现有系列中。 需要身份验证。
seriesId(string,必填)-系列的IDpostId(string,必填)-要添加的帖子的ID- 返回:具有id、name和slug的序列对象
Static Page Tools
getStaticPageBySlug
从出版物中获取静态页面的slug。
publicationHost(string,必填)-发布的主机域slug(string,必填)-静态页面的slug- 返回:具有id、title、slug和内容的StaticPage对象
🧪 发展
先决条件
- Node.js v16+
- npm或pnpm
设置
# Clone repository
git clone https://github.com/rawveg/hashnode-mcp.git
cd hashnode-mcp
# Install dependencies
npm install
# Build project
npm run build
# Run tests
npm test
# Run tests with coverage
npm run test:coverage测试覆盖率
该项目遵循严格的TDD方法:
Statements : 95%+
Branches : 95%+
Functions : 100%
Lines : 95%+测试原理:
- 所有功能的红绿重构周期
- 关键路径始终经过测试
- 边缘案例经过选择性测试
- 按影响排序的错误路径
添加新工具
- 创建
src/tools/your-tool.ts:
import { ToolDefinition } from '../autoloader.js';
import { GraphQLClient } from '../utils/graphql-client.js';
export const toolDefinitions: ToolDefinition[] = [
{
name: 'yourTool',
description: 'Your tool description',
inputSchema: {
type: 'object',
properties: {
param: { type: 'string' }
},
required: ['param']
},
handler: async (client, args) => {
// Implementation
return 'result';
}
}
];- 在中创建测试
__tests__/tools/your-tool.test.ts - 完成!自动加载器会自动发现它。
🤝 贡献
欢迎投稿!请遵循以下指南:
- 分叉 存储库
- 创建 特征分支(
git checkout -b feature/amazing-feature) - 编写测试 -我们保持95%以上的覆盖率
- 提交 信息清晰(
git commit -m 'Add amazing feature') - 推 到您的分行(
git push origin feature/amazing-feature) - 打开 拉取请求
代码质量标准
- 所有新工具都必须导出
toolDefinitions - 保持≥80%的测试覆盖率
- 遵循现有的TypeScript模式
- TypeScript严格模式是不可协商的
- 遵循红绿重构TDD周期
📄 许可证
该项目根据 GNU Affero通用公共许可证v3.0 (AGPL-3.0)。
看 许可证 了解详情。
🔗 相关项目
🙏 致谢
内置:
- MCP-SDK -模型上下文协议SDK
- -Hashnode的官方API
______________________________________________________________________
由以下材料制成❤️ 通过 提姆·格林
