Skip to main content
Glama
jfuentesa

emule-mcp

by jfuentesa

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/macOS

Configuration

It is configured through environment variables:

Variable

Required

Default

Description

EMULE_WEB_PASSWORD

Yes

-

Password for the eMule WebServer.

EMULE_WEB_URL

No

http://127.0.0.1:4711

Base URL of the WebServer.

EMULE_WEB_USER

No

-

Username, only for the multiuser variant.

EMULE_WEB_TIMEOUT_MS

No

10000

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/macOS

Both scripts use the .venv interpreter. Equivalent alternatives:

.venv\Scripts\python -m emule_mcp.server   # Windows
emule-mcp                                  # console script, after installing the package

A 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 tool

or

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 tool

Available tools

Tool

Parameters

Description

emule_status

-

Connection state, upload/download speed and Kad status.

emule_search

query; method (server|global|kademlia, default server); file_type (Audio, Video, Image, Doc, Pro, Arc, Iso, optional); limit (default 25)

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.

emule_download

ed2k

Adds an eD2k link to the download queue and confirms it was registered.

emule_list_downloads

-

Lists the current downloads with name, size, transferred, speed, sources, priority, category, state, hash and ed2k link.

emule_list_servers

-

Lists the known servers with address, state, users, files and priority.

emule_connect

ip and port (both or neither; defaults to any available server)

Connects eMule to a server.

emule_disconnect

-

Disconnects from the current server.

Tests

.venv\Scripts\python -m pytest

License

MIT. See LICENSE.

Available Tools

7 tools
emule_connectC

Connect eMule to a server. With no arguments, connect to any available server.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipNo
portNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ed2kYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/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 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_statusA

Return the connection state, transfer rates and Kad status of eMule.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv1.0.0
    • First observedemule_connect
    • First observedemule_disconnect
    • First observedemule_download
    • First observedemule_list_downloads
    • First observedemule_list_servers
    • First observedemule_search
    • First observedemule_status

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

Seven tools is well-scoped for an eMule control server. Each tool covers a necessary operation without redundancy or bloat.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    A 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
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables 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.
    7
    3
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with and manage Minecraft servers through a standardized interface, supporting server monitoring, player management, log analysis, and command execution.
    11
    MIT