返回市场
中型MCP-API服务器

中型MCP-API服务器

作者:jignesh884 星标更新:2025-03-16

项目介绍

Medium MCP API 服务器

一个与Medium API集成的Model Context Protocol (MCP)服务器,使外部应用程序能够无缝地发布内容和管理用户账户。Model Context Protocol提供了一种标准化的方式,让AI模型与外部服务和API进行交互,使得这个服务器可以作为AI助手与Medium发布平台之间的桥梁。

🚀 功能

  • 身份验证及用户管理

    • 安全的Medium OAuth集成
    • 基于JWT的身份验证
    • 用户资料管理
  • 内容发布

    • 支持Markdown和HTML内容格式
    • 草稿创建和管理
    • 文章排期
    • 发布集成
    • 标签和分类支持
  • 媒体管理

    • 图片上传和存储
    • 内容格式化工具
  • 可靠性及性能

    • 基于Redis的缓存
    • 文章发布的任务调度
    • 全面的错误处理
    • 流量限制

📋 要求

  • Node.js 16+
  • MongoDB
  • Redis(可选,但推荐用于调度)
  • Medium API凭证

🛠️ 安装

使用Docker(推荐)

  1. 克隆仓库:

    git clone https://github.com/jignesh88/medium-mcp-api.git
    cd medium-mcp-api
    
  2. 根据示例创建.env文件:

    cp .env.example .env
    
  3. 使用您的凭证更新.env文件:

    MEDIUM_CLIENT_ID=your_medium_client_id
    MEDIUM_CLIENT_SECRET=your_medium_client_secret
    MEDIUM_REDIRECT_URI=http://your-domain.com/api/auth/medium/callback
    JWT_SECRET=your_strong_secret_key
    
  4. 使用Docker Compose启动服务:

    docker-compose up -d
    

手动安装

  1. 克隆仓库:

    git clone https://github.com/jignesh88/medium-mcp-api.git
    cd medium-mcp-api
    
  2. 安装依赖:

    npm install
    
  3. 创建并配置您的.env文件

  4. 启动MongoDB和Redis服务器

  5. 启动应用:

    npm start
    

🔐 Medium API 设置

  1. https://medium.com/me/applications创建一个Medium开发者应用
  2. 将回调URL设置为http://your-domain.com/api/auth/medium/callback
  3. 将您的Client ID和Client Secret复制到您的.env文件中

📚 API 文档

身份验证端点

注册新用户

POST /api/auth/register

请求体:

{
  "email": "user@example.com",
  "name": "John Doe"
}

响应:

{
  "message": "用户注册成功",
  "token": "jwt_token_here",
  "user": {
    "userId": "user_id",
    "email": "user@example.com",
    "name": "John Doe"
  }
}

登录

POST /api/auth/login

请求体:

{
  "email": "user@example.com"
}

响应:

{
  "message": "登录成功",
  "token": "jwt_token_here",
  "user": {
    "userId": "user_id",
    "email": "user@example.com",
    "name": "John Doe",
    "mediumConnected": true
  }
}

连接Medium账户

GET /api/auth/medium

头部信息:

Authorization: Bearer jwt_token_here

响应:

{
  "authUrl": "https://medium.com/m/oauth/authorize?client_id=..."
}

内容管理端点

创建文章

POST /api/posts

头部信息:

Authorization: Bearer jwt_token_here

请求体:

{
  "title": "我的新文章",
  "content": "# Markdown 内容\n\n这是我的文章内容。",
  "contentFormat": "markdown",
  "tags": ["编程", "教程"],
  "publishStatus": "草稿",
  "publicationId": "可选的出版物ID"
}

响应:

{
  "_id": "post_id",
  "userId": "user_id",
  "title": "我的新文章",
  "content": "# Markdown 内容\n\n这是我的文章内容。",
  "contentFormat": "markdown",
  "tags": ["编程", "教程"],
  "publishStatus": "草稿",
  "createdAt": "2025-03-16T07:00:00.000Z",
  updatedAt": "2025-03-16T07:00:00.000Z"
}

将文章发布到Medium

POST /api/posts/:postId/publish

头部信息:

Authorization: Bearer jwt_token_here

响应:

{
  "message": "文章发布成功",
  "post": {
    "_id": "post_id",
    "mediumPostId": "medium_post_id",
    "title": "我的新文章",
    "published": true,
    ...
  }
}

获取用户的帖子

GET /api/posts?status=draft&page=1&limit=10

头部信息:

Authorization: Bearer jwt_token_here

响应:

{
  "posts": [
    {
      "_id": "post_id",
      "title": "我的新文章",
      ...
    }
  ],
  "total": 15,
  "page": 1,
  "pages": 2
}

媒体管理

上传图片

POST /api/media/upload

头部信息:

Authorization: Bearer jwt_token_here
Content-Type: multipart/form-data

表单数据:

image: [file]

响应:

{
  "message": "文件上传成功",
  "filePath": "/uploads/filename.jpg",
  "fileName": "filename.jpg",
  "originalName": "my-image.jpg",
  "mimeType": "image/jpeg",
  "size": 12345
}

🔄 集成MCP服务器

示例:使用Node.js发布文章

const axios = require('axios');

const API_URL = 'http://your-domain.com';
const TOKEN = 'your_jwt_token';

async function publishPost() {
  try {
    // 创建草稿文章
    const post = await axios.post(`${API_URL}/api/posts`, {
      title: '我的精彩文章',
      content: '# Hello Medium\n\n这是通过MCP API发布的我的第一篇文章。',
      contentFormat: 'markdown',
      tags: ['api', 'medium', '教程'],
      publishStatus: '草稿'
    }, {
      headers: {
        'Authorization': `Bearer ${TOKEN}`
      }
    });
    
    // 将文章发布到Medium
    const published = await axios.post(`${API_URL}/api/posts/${post.data._id}/publish`, {}, {
      headers: {
        'Authorization': `Bearer ${TOKEN}`
      }
    });
    
    console.log('文章发布成功!', published.data);
  } catch (error) {
    console.error('发布文章时出错:', error.response?.data || error.message);
  }
}

publishPost();

📅 定时发布

服务器支持为未来的发布安排文章。在创建或更新文章时,包括一个带有ISO时间戳的scheduledAt字段:

{
  "title": "定时发布的文章",
  "content": "这将在指定的时间自动发布。",
  "scheduledAt": "2025-03-20T12:00:00.000Z"
}

如果配置了Redis,服务器将在指定的时间自动发布文章。

🛡️ 安全注意事项

  • 生产环境中始终使用HTTPS
  • 定期轮换JWT密钥
  • 设置适当的监控和日志记录
  • 将敏感数据存储在环境变量或安全金库中
  • 实现正确的CORS策略

🔧 配置

所有配置都是通过环境变量完成的:

变量描述必需
PORT服务器端口(默认:3000)
MONGODB_URIMongoDB连接字符串
REDIS_URLRedis连接字符串
JWT_SECRETJWT令牌的密钥
MEDIUM_CLIENT_IDMedium API客户端ID
MEDIUM_CLIENT_SECRETMedium API客户端密钥
MEDIUM_REDIRECT_URIOAuth回调URL
FRONTEND_URL前端重定向的URL

📜 许可证

MIT

🤝 贡献

欢迎贡献!请随时提交Pull Request。

  1. 分支仓库
  2. 创建您的功能分支(git checkout -b feature/amazing-feature
  3. 提交更改(git commit -m '添加一些精彩的功能'
  4. 推送到分支(git push origin feature/amazing-feature
  5. 打开Pull Request