Moodle Developer Documentation MCP Server
Provides tools for searching, browsing, and retrieving Moodle developer documentation, including version-specific documentation and API structure.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Moodle Developer Documentation MCP ServerSearch for database API in Moodle 4.2"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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_mcpFor 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_mcpInstall with UV (Recommended for faster installs)
If you have uv installed:
uv pip install moodle_dev_mcpVerify 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_mcpConfiguration
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.jsonWindows:
%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_mcpAvailable 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 versions2. 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 searchlimit(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 53. 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 structure4. 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/modUsage 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:
pytestTroubleshooting
Common Installation Issues
Permission Errors: Use
pip install --user moodle_dev_mcpif you encounter permission issuesPython Version: Ensure you're using Python 3.8 or higher:
python --versionVirtual Environment: Consider using a virtual environment to avoid conflicts
Runtime Issues
Network Connectivity: Ensure you have internet access to reach moodledev.io
Timeout Errors: The server includes built-in retry logic, but very slow connections may timeout
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_mcpContributing
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
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Make your changes
Run tests (
pytest)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Email: wenkhairu@gmail.com
Acknowledgments
Built on the Model Context Protocol by Anthropic
Documentation sourced from Moodle Developer Resources
Thanks to the Moodle development community for comprehensive documentation
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 toolsfetch_pageB
Fetch full content of a specific Moodle developer documentation page
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the documentation page to fetch |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Moodle version (e.g., '4.1', '4.2') - defaults to latest if not specified |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for documentation (e.g., 'database API', 'plugin development') | |
| version | No | Specific Moodle version to search (optional, defaults to latest) | |
| limit | No | Maximum number of results to return (default: 10) |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.0.4- First observed
fetch_page - First observed
get_api_structure - First observed
get_versions - First observed
search_docs
TDQS
Scored across 4 tools
Each tool has a distinct, non-overlapping purpose: fetching pages, getting API structures, listing versions, and searching. No ambiguity in tool selection.
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.
With 4 tools, the server is well-scoped for its purpose of browsing Moodle developer documentation. Each tool serves a necessary function without redundancy.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn 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 npm13MIT
- AlicenseNot gradedqualityAmaintenanceSelf-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 npm78Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA powerful Model Context Protocol (MCP) server implementation for seamless Google Docs API integration, enabling AI assistants to create, read, update, and manage Google Docs.6 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides 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 npm2MIT