Skip to main content
Glama
khairu-aqsara

Moodle Developer Documentation MCP Server

Moodle Developer Documentation MCP Server

A Model Context Protocol (MCP) server that provides seamless access to Moodle developer documentation from moodledev.io. This server enables AI assistants and other MCP clients to search, browse, and retrieve Moodle development documentation with version-specific support.

PyPI version Python versions License: MIT

Features

  • 🔍 Search Documentation: Search across Moodle developer documentation with intelligent filtering

  • 📚 Version Support: Access documentation for multiple Moodle versions (4.1, 4.2, 5.0, etc.)

  • 🗂️ API Structure: Browse and explore Moodle's API documentation structure

  • 📄 Page Fetching: Retrieve full content from specific documentation pages

  • Async Performance: Built with async/await for efficient concurrent operations

  • 🔧 MCP Compatible: Works with any MCP-compatible client (Claude Desktop, etc.)

Related MCP server: ContextMCP

Installation

Prerequisites

  • Python 3.8 or higher

  • pip (Python package installer)

Install from PyPI

The easiest way to install the Moodle Developer Documentation MCP Server is via PyPI:

pip install moodle_dev_mcp

For Development or Specific Environments

If you're working in a virtual environment (recommended):

# Create a virtual environment
python -m venv moodle_mcp_env

# Activate the virtual environment
# On Windows:
moodle_mcp_env\Scripts\activate
# On macOS/Linux:
source moodle_mcp_env/bin/activate

# Install the package
pip install moodle_dev_mcp

If you have uv installed:

uv pip install moodle_dev_mcp

Verify Installation

After installation, verify that the server is properly installed:

python -c "import moodle_dev_mcp; print('Installation successful!')"

Or test the server directly:

python -m moodle_dev_mcp

Configuration

Claude Desktop Integration

To use this MCP server with Claude Desktop, add the following configuration to your Claude Desktop config file:

Location of config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Configuration:

{
  "mcpServers": {
    "moodle_dev_docs": {
      "command": "python",
      "args": ["-m", "moodle_dev_mcp"],
      "env": {}
    }
  }
}

If you installed in a virtual environment, use the full path to the Python executable:

{
  "mcpServers": {
    "moodle_dev_docs": {
      "command": "/path/to/your/venv/bin/python",
      "args": ["-m", "moodle_dev_mcp"],
      "env": {}
    }
  }
}

Other MCP Clients

For other MCP clients, use the following command to start the server:

python -m moodle_dev_mcp

Available Tools

The server provides the following tools that can be used by MCP clients:

1. get_versions

Get a list of available Moodle versions in the developer documentation.

Parameters: None

Example usage:

Get available Moodle versions

2. search_docs

Search Moodle developer documentation for specific topics or APIs.

Parameters:

  • query (required): Search query (e.g., "database API", "plugin development")

  • version (optional): Specific Moodle version to search

  • limit (optional): Maximum number of results (default: 10)

Example usage:

Search for "plugin development" in Moodle documentation
Search for "database API" in version 4.2 with limit 5

3. get_api_structure

Get the API documentation structure for a specific Moodle version.

Parameters:

  • version (optional): Moodle version (defaults to latest)

Example usage:

Get API structure for Moodle 4.2
Get latest API structure

4. fetch_page

Fetch full content of a specific Moodle developer documentation page.

Parameters:

  • url (required): Full URL of the documentation page

Example usage:

Fetch content from https://moodledev.io/docs/apis/plugintypes/mod

Usage Examples

Once configured with your MCP client, you can use natural language to interact with the Moodle documentation:

Basic Searches

  • "Search for plugin development best practices"

  • "Find documentation about database APIs"

  • "Look up authentication methods in Moodle"

Version-Specific Queries

  • "Get API documentation for Moodle 4.2"

  • "Search for web services in version 5.0"

  • "Show me the plugin structure for the latest version"

Detailed Content Retrieval

  • "Fetch the complete plugin development guide"

  • "Get the full content of the database API documentation"

Development

Development Installation

For development, clone the repository and install in development mode:

git clone https://github.com/khairu-aqsara/moodle_dev_mcp.git
cd moodle_dev_mcp

# Install in development mode
pip install -e .

# Or with development dependencies
pip install -e ".[dev]"

Dependencies

  • Python 3.8+

  • mcp: Model Context Protocol implementation

  • aiohttp: Async HTTP client for web requests

  • beautifulsoup4: HTML parsing and content extraction

Testing

Run tests with:

pytest

Troubleshooting

Common Installation Issues

  1. Permission Errors: Use pip install --user moodle_dev_mcp if you encounter permission issues

  2. Python Version: Ensure you're using Python 3.8 or higher: python --version

  3. Virtual Environment: Consider using a virtual environment to avoid conflicts

Runtime Issues

  1. Network Connectivity: Ensure you have internet access to reach moodledev.io

  2. Timeout Errors: The server includes built-in retry logic, but very slow connections may timeout

  3. Rate Limiting: The server respects rate limits and includes appropriate delays

Debug Mode

Enable debug logging by setting the environment variable:

export PYTHONPATH=.
python -c "import logging; logging.basicConfig(level=logging.DEBUG)" -m moodle_dev_mcp

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

Development Setup

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Make your changes

  4. Run tests (pytest)

  5. Commit your changes (git commit -m 'Add amazing feature')

  6. Push to the branch (git push origin feature/amazing-feature)

  7. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Acknowledgments


Note: This is an unofficial tool and is not affiliated with Moodle HQ. It's designed to make Moodle developer documentation more accessible through modern AI tools.

Available Tools

4 tools
fetch_pageB

Fetch full content of a specific Moodle developer documentation page

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFull URL of the documentation page to fetch

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are present, and the description does not disclose any behavioral traits such as error handling, authentication, or rate limits, leaving the agent uninformed.

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?

A single, concise sentence that efficiently communicates the tool's purpose without any extraneous information.

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?

For a simple tool with one parameter and no output schema, the description is minimally adequate but lacks details on output format, error responses, or limitations.

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 description adds no meaning beyond the input schema, which already provides a clear description for the single 'url' parameter. With 100% schema coverage, a score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'fetch' and the resource 'full content of a specific Moodle developer documentation page', making it distinct from sibling tools like get_api_structure and search_docs.

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?

No guidance is provided on when to use this tool versus alternatives, nor any context on prerequisites or exclusions.

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

get_api_structureB

Get the API documentation structure for a specific Moodle version

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoMoodle version (e.g., '4.1', '4.2') - defaults to latest if not specified

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided; description does not disclose behavioral traits such as read-only nature, output format, or side effects.

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?

Single sentence, no redundant information, front-loaded with essential purpose.

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?

For a simple one-parameter tool with no output schema, the description is adequate but lacks details on the structure returned or operational context.

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?

Schema coverage is 100% and schema already describes the parameter. Description adds minimal extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states the verb 'Get' and resource 'API documentation structure' for a specific Moodle version, distinguishing it from siblings like fetch_page or search_docs.

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?

No guidance on when to use this tool versus alternatives, nor any mention of prerequisites or limitations.

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

get_versionsA

Get available Moodle versions in the developer documentation

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations are absent, so the description must disclose behavior. It confirms a read operation but lacks details about caching, error handling, or scope (e.g., all versions or just recent). While not misleading, it does not go beyond the bare minimum.

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?

A single sentence that is front-loaded with the verb and resource. Every word serves a purpose, and there is no redundant information. It is as concise as possible while being clear.

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

Completeness4/5

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

Given the tool has no parameters and no output schema, the description adequately states the purpose. However, it does not hint at the structure of the versions (e.g., list of version strings) or any constraints, leaving minor gaps for an agent expecting more detail.

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

Parameters4/5

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

The input schema has no parameters, and schema coverage is 100% by default. The description adds value by stating what the tool returns ('available Moodle versions'), which is not evident from the empty schema. No further param explanation needed.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('available Moodle versions'), clearly distinguishing it from sibling tools like fetch_page or search_docs. It immediately conveys what the tool returns without ambiguity.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool over siblings or under what conditions. The description is minimal and does not mention alternatives or exclusions, though the use case is straightforward for a zero-parameter retrieval tool.

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

search_docsA

Search Moodle developer documentation for specific topics or APIs

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for documentation (e.g., 'database API', 'plugin development')
versionNoSpecific Moodle version to search (optional, defaults to latest)
limitNoMaximum number of results to return (default: 10)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description is the sole source. It states the tool searches documentation but does not disclose any behavioral details such as result format, pagination, rate limits, or error handling. It is adequate but minimal.

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, front-loaded sentence that conveys the core purpose without unnecessary words. Every word earns its place.

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?

With 3 parameters, no output schema, and no annotations, the description is minimal. It does not explain return values, pagination, or error cases. An agent might need more information to use the tool effectively, but it is not critically incomplete.

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 for all parameters (query, version, limit). The description does not add additional meaning beyond the schema. The baseline of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool searches Moodle developer documentation for specific topics or APIs, using a specific verb ('search') and resource ('Moodle developer documentation'). It distinguishes itself from sibling tools like fetch_page, get_api_structure, and get_versions, which have different purposes.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when searching for topics or APIs) but does not explicitly state when not to use it or provide direct comparisons to siblings. No alternative tools are named.

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. 4 tool updatesv1.0.4
    • First observedfetch_page
    • First observedget_api_structure
    • First observedget_versions
    • First observedsearch_docs

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct, non-overlapping purpose: fetching pages, getting API structures, listing versions, and searching. No ambiguity in tool selection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (fetch_page, get_api_structure, get_versions, search_docs), making them predictable and easy to understand.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose of browsing Moodle developer documentation. Each tool serves a necessary function without redundancy.

Completeness4/5

The tool set covers core documentation needs (retrieving pages, searching, version info, API structure). A minor gap is the lack of a tool to list all pages or browse categories, but this is compensable through search.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides version-pinned, deterministic documentation sourced from DevDocs.io to AI assistants (Claude, RooCode, Cline, Copilot etc.) and also via offline mode. Not via Scraping! But using the supported downloading option from devdocs.
    34 npm
    13
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Self-hosted MCP server that indexes documentation from various sources and makes it searchable by AI assistants via the Model Context Protocol and REST API.
    17 npm
    78
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides a local MCP server for searching and retrieving documentation from 22+ open-source projects, enabling AI coding assistants to access up-to-date docs without network dependency.
    11 npm
    2
    MIT