Skip to main content
Glama

🎓 MCP Content Curation Server

Node.js TypeScript OpenAI License

A Model Context Protocol (MCP) server for intelligent course content curation powered by GPT-4. This server provides AI-driven tools to categorize, tag, and improve educational content.

✨ Features

  • 🗂️ Smart Categorization: AI-powered category suggestions for course content

  • 🏷️ Intelligent Tagging: Context-aware tag recommendations using GPT-4

  • ✨ Content Optimization: Improve titles and descriptions following best practices

  • 🔌 MCP Integration: Seamless integration with Claude Desktop and other MCP clients

Related MCP server: OpenEdu MCP Server

🚀 Quick Start

Prerequisites

  • Node.js 18+

  • OpenAI API key

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/mcp-content-curation-server.git
    cd mcp-content-curation-server
  2. Install dependencies

    npm install
  3. Configure environment

    cp .env.example .env
    # Edit .env and add your OpenAI API key
  4. Run the server

    # Development mode
    npm run dev
    
    # Production mode
    npm run build
    npm start

đź”§ OpenAI Setup

  1. Get your API key from OpenAI Platform

  2. Add it to your .env file:

    OPENAI_API_KEY=sk-your-actual-api-key-here

🖥️ Claude Desktop Integration

Update your claude_desktop_config.json:

Development Mode:

{
  "mcpServers": {
    "content-curation": {
      "command": "npx",
      "args": ["tsx", "/path/to/your/project/src/server.ts"],
      "cwd": "/path/to/your/project",
      "env": {
        "NODE_ENV": "development"
      }
    }
  }
}

Production Mode:

{
  "mcpServers": {
    "content-curation": {
      "command": "node",
      "args": ["/path/to/your/project/dist/server.js"],
      "cwd": "/path/to/your/project",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

🛠️ Available Tools

1. suggest_category

Suggests the most appropriate category for course content.

Input:

{
  "title": "Python for Data Science",
  "description": "Learn data analysis with pandas and matplotlib"
}

2. suggest_tags

Recommends relevant tags based on course content.

Input:

{
  "title": "Digital Marketing Fundamentals",
  "description": "Master SEO, Google Ads, and social media marketing"
}

3. improve_content

Optimizes titles and descriptions following educational best practices.

Input:

{
  "title": "JavaScript Basics",
  "description": "Learn programming fundamentals"
}

📊 Data Structure

The server includes:

  • 5 main categories: Technology, Business, Design, Marketing, Analytics

  • 18 contextual tags: Organized by subject area

  • 10 sample courses: For similarity analysis and training

đź’ˇ Usage Examples

Categorization

Suggest a category for: "Advanced React Hooks" - "Custom hooks and performance optimization in React"

Tagging

What tags would you recommend for: "Machine Learning with Python"?

Content Improvement

Improve this content:
Title: "Excel Basics"
Description: "Learn spreadsheets"

🛠️ Development

Available Scripts

  • npm run dev - Start development server

  • npm run build - Compile TypeScript

  • npm start - Run production server

  • npm run debug - Run diagnostics

Project Structure

src/
├── server.ts              # Main MCP server
├── services/
│   ├── ai.service.ts       # OpenAI GPT-4 integration
│   └── curation.service.ts # Curation logic
├── data/
│   └── mock-data.ts        # Categories, tags, and sample data
└── types.ts               # TypeScript definitions

Available Tools

3 tools
improve_contentC

Melhora título e descrição de um curso seguindo boas práticas

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTĂ­tulo atual do curso
descriptionYesDescrição atual do curso

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool improves content but doesn't explain how (e.g., does it rewrite, suggest alternatives, or validate?), what the output looks like, or any constraints like rate limits or permissions needed. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Portuguese that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy to understand at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a content improvement tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'improves' entails, the format or nature of the output, or how it interacts with sibling tools. This leaves the agent with insufficient context to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with clear descriptions for both parameters ('title' and 'description'). The description adds no additional meaning beyond what the schema provides, as it doesn't elaborate on parameter usage or constraints. Given the high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Melhora' - improves) and the resource ('título e descrição de um curso' - title and description of a course), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'suggest_category' or 'suggest_tags' which might also relate to course content optimization, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'suggest_category' or 'suggest_tags'. It mentions 'seguindo boas práticas' (following good practices), which implies a context of quality improvement, but offers no explicit when/when-not instructions or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_categoryC

Sugere categoria mais apropriada para um curso usando IA

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTĂ­tulo do curso
descriptionYesDescrição do curso

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool uses AI ('usando IA'), which hints at automated processing, but doesn't describe key behaviors: it doesn't specify if this is a read-only operation, what the output format might be (e.g., a single category or multiple suggestions), potential limitations like accuracy or rate limits, or any side effects. For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Portuguese that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action ('Sugere categoria'), making it easy to parse. However, it could be slightly more structured by including key details like output or usage context, but as is, it earns its place concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the context: no annotations, no output schema, and a tool that likely involves AI processing with two parameters, the description is incomplete. It doesn't explain what the tool returns (e.g., a category name or list), any behavioral traits like reliability or speed, or how it integrates with sibling tools. For a tool with no structured data beyond the input schema, the description should provide more context to be fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear documentation for both parameters ('title' and 'description' of the course). The description adds no additional meaning beyond what the schema provides—it doesn't explain how these inputs are used by the AI, any constraints on their content, or examples. With high schema coverage, the baseline score is 3, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Sugere categoria mais apropriada para um curso usando IA' (Suggests the most appropriate category for a course using AI). It specifies the verb 'sugere' (suggests), the resource 'categoria' (category), and the context 'para um curso' (for a course). However, it doesn't explicitly differentiate from sibling tools like 'improve_content' or 'suggest_tags', which likely serve different purposes (e.g., content improvement vs. tag suggestion).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools ('improve_content', 'suggest_tags') or specify contexts where this tool is preferred, such as for initial course categorization versus other categorization methods. There's also no information on prerequisites or exclusions, leaving usage entirely implied from the purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_tagsB

Sugere tags relevantes para um curso usando IA

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTĂ­tulo do curso
descriptionYesDescrição do curso

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions AI usage but does not describe how the tool behaves, such as whether it generates tags based on input, requires specific permissions, has rate limits, or returns structured data. The description lacks details on operational traits beyond the basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Portuguese: 'Sugere tags relevantes para um curso usando IA'. It is front-loaded with the core purpose, has no redundant information, and every word contributes to understanding the tool's function. It is appropriately sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (AI-based suggestion with 2 parameters) and lack of annotations and output schema, the description is minimally adequate. It states what the tool does but lacks details on behavior, output format, or error handling. For a tool with no structured output and no annotations, more context would be beneficial, but it meets the basic threshold.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear documentation for 'title' and 'description' parameters. The description does not add any semantic details beyond what the schema provides, such as format examples or usage tips. Since schema coverage is high, the baseline score of 3 is appropriate, as the description does not compensate but also does not detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Sugere tags relevantes para um curso usando IA' (Suggests relevant tags for a course using AI). It specifies the verb 'sugere' (suggests), the resource 'tags' (tags), and the context 'para um curso' (for a course). However, it does not explicitly differentiate from sibling tools like 'improve_content' or 'suggest_category', which may also involve AI suggestions for course-related content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'improve_content' or 'suggest_category', nor does it specify prerequisites, exclusions, or contextual cues for selection. Usage is implied based on the need for tag suggestions, but explicit guidelines are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • First observedimprove_content
    • First observedsuggest_category
    • First observedsuggest_tags

TDQS

B3.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: improve_content focuses on enhancing title and description, suggest_category recommends a category, and suggest_tags suggests tags. There is no overlap in functionality, making it easy for an agent to select the correct tool without confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (improve_content, suggest_category, suggest_tags) with the same verb style ('improve' and 'suggest'). This predictability aids in understanding and usage without deviation.

Tool Count3/5

With only 3 tools, the server feels thin for a content curation domain, as it lacks operations like creating, updating, or deleting content. While the tools are focused, the scope is limited, potentially requiring workarounds for full curation workflows.

Completeness2/5

The toolset is severely incomplete for content curation, missing core CRUD operations (e.g., create_content, update_content, delete_content) and other essential functions like listing or searching content. This will likely cause agent failures in handling comprehensive curation tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers