medio-MCP-API
Protocolo de comunicación de microservicio (MCP) para la API de Medium para publicar contenido y administrar cuentas de usuario
1
Github Watches
1
Github Forks
1
Github Stars
Medium MCP API Server
A Model Context Protocol (MCP) server that integrates with Medium's API to enable seamless content publishing and user account management from external applications. The Model Context Protocol provides a standardized way for AI models to interact with external services and APIs, allowing this server to serve as a bridge between AI assistants and the Medium publishing platform.
🚀 Features
-
Authentication & User Management
- Secure Medium OAuth integration
- JWT-based authentication
- User profile management
-
Content Publishing
- Support for Markdown and HTML content formats
- Draft creation and management
- Post scheduling
- Publication integration
- Tag and category support
-
Media Management
- Image upload and storage
- Content formatting utilities
-
Reliability & Performance
- Redis-based caching
- Job scheduling for post publication
- Comprehensive error handling
- Rate limiting
📋 Requirements
- Node.js 16+
- MongoDB
- Redis (optional, but recommended for scheduling)
- Medium API credentials
🛠️ Installation
Using Docker (Recommended)
-
Clone the repository:
git clone https://github.com/jignesh88/medium-mcp-api.git cd medium-mcp-api -
Create a
.envfile based on the example:cp .env.example .env -
Update the
.envfile with your credentials: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 -
Start the services using Docker Compose:
docker-compose up -d
Manual Installation
-
Clone the repository:
git clone https://github.com/jignesh88/medium-mcp-api.git cd medium-mcp-api -
Install dependencies:
npm install -
Create and configure your
.envfile -
Start MongoDB and Redis servers
-
Start the application:
npm start
🔐 Medium API Setup
- Create a Medium developer application at https://medium.com/me/applications
- Set the callback URL to
http://your-domain.com/api/auth/medium/callback - Copy your Client ID and Client Secret to your
.envfile
📚 API Documentation
Authentication Endpoints
Register a new user
POST /api/auth/register
Request Body:
{
"email": "user@example.com",
"name": "John Doe"
}
Response:
{
"message": "User registered successfully",
"token": "jwt_token_here",
"user": {
"userId": "user_id",
"email": "user@example.com",
"name": "John Doe"
}
}
Login
POST /api/auth/login
Request Body:
{
"email": "user@example.com"
}
Response:
{
"message": "Login successful",
"token": "jwt_token_here",
"user": {
"userId": "user_id",
"email": "user@example.com",
"name": "John Doe",
"mediumConnected": true
}
}
Connect Medium Account
GET /api/auth/medium
Headers:
Authorization: Bearer jwt_token_here
Response:
{
"authUrl": "https://medium.com/m/oauth/authorize?client_id=..."
}
Content Management Endpoints
Create a Post
POST /api/posts
Headers:
Authorization: Bearer jwt_token_here
Request Body:
{
"title": "My New Post",
"content": "# Markdown Content\n\nThis is my post content.",
"contentFormat": "markdown",
"tags": ["programming", "tutorial"],
"publishStatus": "draft",
"publicationId": "optional_publication_id"
}
Response:
{
"_id": "post_id",
"userId": "user_id",
"title": "My New Post",
"content": "# Markdown Content\n\nThis is my post content.",
"contentFormat": "markdown",
"tags": ["programming", "tutorial"],
"publishStatus": "draft",
"createdAt": "2025-03-16T07:00:00.000Z",
"updatedAt": "2025-03-16T07:00:00.000Z"
}
Publish a Post to Medium
POST /api/posts/:postId/publish
Headers:
Authorization: Bearer jwt_token_here
Response:
{
"message": "Post published successfully",
"post": {
"_id": "post_id",
"mediumPostId": "medium_post_id",
"title": "My New Post",
"published": true,
...
}
}
Get User's Posts
GET /api/posts?status=draft&page=1&limit=10
Headers:
Authorization: Bearer jwt_token_here
Response:
{
"posts": [
{
"_id": "post_id",
"title": "My New Post",
...
}
],
"total": 15,
"page": 1,
"pages": 2
}
Media Management
Upload an Image
POST /api/media/upload
Headers:
Authorization: Bearer jwt_token_here
Content-Type: multipart/form-data
Form Data:
image: [file]
Response:
{
"message": "File uploaded successfully",
"filePath": "/uploads/filename.jpg",
"fileName": "filename.jpg",
"originalName": "my-image.jpg",
"mimeType": "image/jpeg",
"size": 12345
}
🔄 Integrating with the MCP Server
Example: Publishing a post with Node.js
const axios = require('axios');
const API_URL = 'http://your-domain.com';
const TOKEN = 'your_jwt_token';
async function publishPost() {
try {
// Create a draft post
const post = await axios.post(`${API_URL}/api/posts`, {
title: 'My Awesome Article',
content: '# Hello Medium\n\nThis is my first post published via the MCP API.',
contentFormat: 'markdown',
tags: ['api', 'medium', 'tutorial'],
publishStatus: 'draft'
}, {
headers: {
'Authorization': `Bearer ${TOKEN}`
}
});
// Publish the post to Medium
const published = await axios.post(`${API_URL}/api/posts/${post.data._id}/publish`, {}, {
headers: {
'Authorization': `Bearer ${TOKEN}`
}
});
console.log('Post published successfully!', published.data);
} catch (error) {
console.error('Error publishing post:', error.response?.data || error.message);
}
}
publishPost();
📅 Scheduled Publishing
The server supports scheduling posts for future publication. When creating or updating a post, include a scheduledAt field with an ISO timestamp:
{
"title": "Scheduled Post",
"content": "This will be published automatically.",
"scheduledAt": "2025-03-20T12:00:00.000Z"
}
The server will automatically publish the post at the specified time if Redis is configured.
🛡️ Security Considerations
- Always use HTTPS in production
- Rotate your JWT secret regularly
- Set up proper monitoring and logging
- Store sensitive data in environment variables or a secure vault
- Implement proper CORS policies
🔧 Configuration
All configuration is done through environment variables:
| Variable | Description | Required |
|---|---|---|
| PORT | Server port (default: 3000) | No |
| MONGODB_URI | MongoDB connection string | Yes |
| REDIS_URL | Redis connection string | No |
| JWT_SECRET | Secret for JWT tokens | Yes |
| MEDIUM_CLIENT_ID | Medium API client ID | Yes |
| MEDIUM_CLIENT_SECRET | Medium API client secret | Yes |
| MEDIUM_REDIRECT_URI | OAuth callback URL | Yes |
| FRONTEND_URL | URL for frontend redirects | Yes |
📜 License
MIT
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
相关推荐
I craft unique cereal names, stories, and ridiculously cute Cereal Baby images.
I find academic articles and books for research and literature reviews.
Evaluator for marketplace product descriptions, checks for relevancy and keyword stuffing.
Confidential guide on numerology and astrology, based of GG33 Public information
Advanced software engineer GPT that excels through nailing the basics.
Emulating Dr. Jordan B. Peterson's style in providing life advice and insights.
Your go-to expert in the Rust ecosystem, specializing in precise code interpretation, up-to-date crate version checking, and in-depth source code analysis. I offer accurate, context-aware insights for all your Rust programming questions.
Converts Figma frames into front-end code for various mobile frameworks.
Descubra la colección más completa y actualizada de servidores MCP en el mercado. Este repositorio sirve como un centro centralizado, que ofrece un extenso catálogo de servidores MCP de código abierto y propietarios, completos con características, enlaces de documentación y colaboradores.
La aplicación AI de escritorio todo en uno y Docker con trapo incorporado, agentes de IA, creador de agentes sin código, compatibilidad de MCP y más.
Manipulación basada en Micrypthon I2C del expansor GPIO de la serie MCP, derivada de AdaFruit_MCP230xx
Plataforma de automatización de flujo de trabajo de código justo con capacidades de IA nativas. Combine el edificio visual con código personalizado, auto-anfitrión o nube, más de 400 integraciones.
🧑🚀 全世界最好的 llM 资料总结(数据处理、模型训练、模型部署、 O1 模型、 MCP 、小语言模型、视觉语言模型) | Resumen de los mejores recursos del mundo.
Espejo dehttps: //github.com/agentience/practices_mcp_server
Una lista curada de servidores de protocolo de contexto del modelo (MCP)
Reviews
user_k2PYWLtH
The mcp-server-lgtm MCP Server by dongri is simply outstanding! It delivers exceptional performance and reliability, making it a must-have for any server setup. As a loyal user, I appreciate its seamless integration and robust functionality. Highly recommend checking it out: https://mcp.so/server/mcp-server-lgtm/dongri