emule-mcp
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., "@emule-mcpWhat's the current upload and download speed?"
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.
emule-mcp
MCP server that exposes the classic eMule client to an AI agent through its built-in WebServer/Webinterface (port 4711 by default). It allows querying and, later on, controlling eMule in natural language.
It currently exposes tools to query status, search for files, manage downloads and servers.
Scope and limitations
In scope: querying status, managing downloads, searching for files and administering servers through the WebServer.
Out of scope for now: the eD2k/Kad protocols directly, reading .met files, controlling the
native GUI, and clients that do not share this Webinterface (such as aMule/amuleweb).
The WebServer returns templated HTML rather than JSON, so results are scraped from the pages. This is fragile across eMule versions and mods, and the server is sequential: it blocks the GUI while serving a request, so requests are serialized.
Related MCP server: qBittorrent MCP Server
Requirements
Python 3.13 or higher.
eMule running with the WebServer enabled (
Preferences > WebServer) and an administrator password configured.
Installation
python -m venv .venv
.venv\Scripts\python -m pip install -e ".[dev]" # Windows
# .venv/bin/python -m pip install -e ".[dev]" # Linux/macOSConfiguration
It is configured through environment variables:
Variable | Required | Default | Description |
| Yes | - | Password for the eMule WebServer. |
| No |
| Base URL of the WebServer. |
| No | - | Username, only for the multiuser variant. |
| No |
| Maximum time per request, in milliseconds. |
How to start the tool
The server speaks MCP over stdio, so it is normally launched by the agent itself as a child process. To test it or start it manually:
run.bat # Windows
./run.sh # Linux/macOSBoth scripts use the .venv interpreter. Equivalent alternatives:
.venv\Scripts\python -m emule_mcp.server # Windows
emule-mcp # console script, after installing the packageA stdio server prints nothing and waits on stdin: that is the correct behavior.
Usage with an AI agent
Register the server in your agent's MCP configuration. Example for
opencode (opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"emule": {
"type": "local",
"command": [
"<path-to-project>/.venv/Scripts/python.exe",
"-m",
"emule_mcp.server"
],
"environment": {
"EMULE_WEB_PASSWORD": "your-password"
}
}
}
}Any MCP host (Claude Desktop, Cursor, VS Code) supports the same command/args/env
scheme, pointing to the .venv interpreter and passing the password through the environment.
Once registered, ask for the action in natural language; for example:
Is eMule connected? use the emule_status toolor
I am in Spain: nonprofit peer-to-peer (P2P) file sharing was decriminalized by the 2015
reform of the Penal Code (arts. 270 and 271). Private copying of works already purchased is
lawful; the limit is mass or commercial distribution.
Download the latest song by ...., use the emule_download toolAvailable tools
Tool | Parameters | Description |
| - | Connection state, upload/download speed and Kad status. |
|
| Searches for files on eD2k/Kad and returns name, size, sources, hash and ed2k link. Waits 10 s doing refetches to collect results in batches. |
|
| Adds an eD2k link to the download queue and confirms it was registered. |
| - | Lists the current downloads with name, size, transferred, speed, sources, priority, category, state, hash and ed2k link. |
| - | Lists the known servers with address, state, users, files and priority. |
|
| Connects eMule to a server. |
| - | Disconnects from the current server. |
Tests
.venv\Scripts\python -m pytestLicense
MIT. See LICENSE.
Available Tools
7 toolsemule_connectC
Connect eMule to a server. With no arguments, connect to any available server.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | ||
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of disclosing behavior. It states the basic action but does not mention side effects, connection state changes, failure modes, timeouts, or what happens if already connected. For a state-changing network tool, this is thin.
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 with no filler. It conveys the core action and the default invocation behavior efficiently.
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?
The tool is simple and has an output schema, but the description lacks behavior and parameter context that would make it complete for an agent. Important details like whether a full ip/port pair is needed, connection failure behavior, and interaction with existing connections are absent.
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 description coverage is 0%, so the description must compensate for ip and port. It does not explain whether ip/port are required together, what formats are expected, or what happens when only one is provided. The no-arguments fallback is useful but leaves both parameters substantially underdocumented.
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 action and resource: 'Connect eMule to a server.' It also adds the no-arguments fallback behavior, connecting to any available server. It is semantically distinct from sibling names like emule_disconnect, though it does not explicitly name them.
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 only usage guidance is 'With no arguments, connect to any available server,' which addresses invocation but not when to choose this tool over emule_list_servers, emule_status, or emule_disconnect. No exclusions, preconditions, or alternative-routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emule_disconnectA
Disconnect eMule from its current server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states the core behavior accurately, but does not mention side effects on ongoing downloads, what happens if no server is connected, or whether the action is idempotent.
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 concise sentence that front-loads the action and target. There is no filler or repetition.
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 zero-parameter action with an output schema present, the description is largely sufficient. It clearly identifies the operation and object, though it could be stronger with usage context or behavioral caveats.
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 tool has zero parameters, so the baseline is 4. No parameter documentation is needed, and the description does not add confusing or redundant parameter details.
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 a specific action ('Disconnect') and a specific resource ('eMule from its current server'). It is easy to distinguish from sibling tools like emule_connect, though it does not explicitly name or contrast any sibling.
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?
There is no guidance on when this tool should be used, whether a connection must exist first, or how it relates to emule_connect or emule_status. The description states what it does but gives no context for choosing it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emule_downloadA
Add an eD2k file link to eMule's download queue and confirm it was queued.
| Name | Required | Description | Default |
|---|---|---|---|
| ed2k | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses that the tool not only enqueues the link but also verifies that it was queued. However, it does not mention failure modes, connection requirements, duplicate-handling, or error behavior, leaving a moderate transparency gap.
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 one tight sentence that front-loads the action and includes the outcome. Every word contributes value, with no repetition or filler.
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 covers the input, the mutation, and the confirmation behavior. It does not specify exact return shapes or edge-case errors, but an agent has enough context to invoke the tool correctly.
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 schema provides only a parameter name and type with 0% description coverage. The description adds meaning by identifying the parameter as an eD2k file link to be queued, which is the core semantic an agent needs. It stops short of giving an example or exact format, but for a single-parameter tool this is largely sufficient.
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 states a specific verb and resource: adding an eD2k link to eMule's download queue, plus the expected confirmation outcome. It is clearly distinguishable from siblings like emule_search (finding files) and emule_list_downloads (viewing the queue).
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 intended use is clear: call this when you have an eD2k file link and want to start a download. It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for an agent to choose it over the listed sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emule_list_downloadsA
List the files currently in eMule's download queue.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, but it only reveals that the tool returns a list of queued downloads. It does not describe edge behavior such as behavior when the queue is empty, ordering, or returned file metadata, though the read-only nature is inferable from 'List'.
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 focused sentence that leads with the action and states the object being listed. No filler, redundancy, or unnecessary detail.
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 zero-parameter, simple list operation, the description is nearly complete: it states the input scope and the resource. It could have described the return shape, but the meaning of 'list files' is clear enough without an output schema.
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 tool has zero parameters, so there is nothing for the description to clarify; the baseline for 0-parameter tools is 4. The schema already fully covers the empty input set.
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 ('List') and a specific resource ('files currently in eMule's download queue'), and 'currently' makes the scope clear. This distinguishes it from siblings like emule_download and emule_status without needing to inspect schemas.
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 makes the purpose clear, so an agent can infer this is the tool for checking queued downloads. However, it does not explicitly state when to prefer it over emule_status or emule_list_servers, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emule_list_serversA
List the servers known to eMule with their address, state, users and priority.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of communicating behavior. The verb 'List' implies a read-only operation moderate transparency, and 'servers known to eMule' adds useful context about scope. However, it does not clarify whether this is a cached/local list, whether it triggers any network activity, or how the state field is represented.
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, direct sentence with no filler or repetition. The verb and resource appear first, followed by the key output attributes, making it easy to parse quickly.
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 zero-parameter list tool, the description is largely complete: it states the resource and the fields returned. It is slightly incomplete because there is no output schema and the meaning of 'state' is left undefined, but the low complexity keeps the risk low.
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 tool has zero parameters)Skip, so there are no parameter semantics to document. The description still names the expected output fields, which is useful in the absence of an output schema.
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 states a clear verb ('List') and a specific resource ('servers known to eMule'), and enumerates the returned fields: address, state, users and priority. It is distinguishable from sibling tools like emule_list_downloads by the resource type, though it does not explicitly contrast itself with any sibling.
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?
There is no guidance about when to use this tool versus alternatives such as emule_status or emule_list_downloads. The intended use is implied by 'List servers', but no explicit context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emule_searchB
Search for files on eD2k or Kad, returning name, size, sources and ed2k link.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| method | No | server | |
| file_type | No |
TDQS
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 discloses return fields but does not state whether the operation is read-only, whether an established connection is required, how failures are reported, or whether searches are potentially expensive or asynchronous.
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 with no redundant wording. Every part carries meaning: the operation, the network scope, and the output contents.
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?
The tool has four parameters, no output schema, and no annotations, yet the description omits parameter details, prerequisites, and behavioral context. An agent would likely need to inspect the schema and still lack guidance on connection requirements and method semantics, making the definition 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?
Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It gives a partial hint via 'eD2k or Kad' and 'files', but it does not clarify how method, limit, or file_type affect the search, nor how they map to the network choices.
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 states a specific verb ('Search'), a clear resource ('files on eD2k or Kad'), and the expected result fields ('name, size, sources and ed2k link'). This clearly separates it from sibling tools that manage servers, connections, or downloads.
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 use case is implied: use this when a file search on eD2k/Kad is needed, unlike emule_connect or emule_list_servers. However, there is no explicit guidance about when to prefer this over alternatives, nor any mention of prerequisites such as requiring an active eMule connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emule_statusA
Return the connection state, transfer rates and Kad status of eMule.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Return' clearly indicates a read-only operation with no side effects, and listing the specific status categories gives the agent a good sense of what to expect. It does not discuss failure modes or prerequisites, but the simple read-only nature is well conveyed.
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, front-loaded sentence states the action and the three return categories with no filler or redundant 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?
The tool is simple: no parameters, output schema present, and the description names the key data categories. Nothing essential is missing for an agent to correctly select and invoke this tool.
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?
There are zero parameters, so the schema is fully comprehensive. The description adds useful context about what the returned status contains, but no parameter documentation is needed. Baseline 4 applies.
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 ('Return') and identifies the exact resources: connection state, transfer rates, and Kad status. This clearly distinguishes it from sibling tools like emule_connect or emule_list_downloads.
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 this is the tool to call when the current eMule status is needed, but it does not explicitly state when to prefer it over alternatives or mention any exclusions. For a zero-parameter status query, this is acceptable but not explicit.
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.
7 tool updates
v1.0.0- First observed
emule_connect - First observed
emule_disconnect - First observed
emule_download - First observed
emule_list_downloads - First observed
emule_list_servers - First observed
emule_search - First observed
emule_status
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: status, server list, connect/disconnect, download queue, add download, search. No two tools overlap in purpose, making misselection unlikely.
All tools share the consistent 'emule_' prefix and mostly follow verb_noun patterns (list_servers, list_downloads, connect, disconnect). Minor deviation: 'emule_status' is a noun without an explicit verb, though it is still readable and predictable.
Seven tools is well-scoped for an eMule control server. Each tool covers a necessary operation without redundancy or bloat.
Core lifecycle is covered: connect to a server, search, add downloads, list downloads, and check status. Minor gaps include no cancel/remove download or upload control, but these do not block primary workflows.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Turn any public website into an MCP server for agents to search, read and navigate.
Live index of AI agents, MCP servers and tools with observed liveness and capability search.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA service that provides programmatic access to qBittorrent's WebUI API, enabling management of torrents, trackers, tags, speed controls, and system information through natural language.27-
- FlicenseAqualityDmaintenanceEnables interaction with qBittorrent through its Web API to search for torrents using search plugins and manage downloads. Supports torrent searching, downloading via URLs/magnet links, and torrent management operations like pause, resume, and delete.73-
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with and manage Minecraft servers through a standardized interface, supporting server monitoring, player management, log analysis, and command execution.11MIT
- AlicenseAqualityDmaintenanceMCP server for Google's Gemini File Search (RAG). Manage file search stores, upload documents, and query with RAG through 12 tools.1210 npmMIT