aria2-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., "@aria2-mcpdownload https://example.com/ubuntu-24.04.iso"
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.
aria2-mcp
A Model Context Protocol (MCP) server for the aria2 download manager. It exposes aria2's JSON-RPC API as a small, focused set of MCP tools so an agent can queue, inspect, pause, resume and remove downloads.
Features
Speaks the MCP stdio transport, so it works with any MCP-compatible client.
Talks to aria2 over its JSON-RPC interface, including
--rpc-secretauthentication.Strict input validation and structured error reporting.
No runtime dependencies beyond the official MCP SDK.
Fully typed, linted, formatted and unit tested.
Related MCP server: fieldcure-mcp-essentials
Requirements
Node.js 20 or newer.
A reachable aria2 RPC endpoint. Start aria2 with RPC enabled:
aria2c --enable-rpc --rpc-listen-port=6800 --rpc-secret=your_secretInstallation
Use it straight from GitHub without cloning:
npx -y github:iavjkae/aria2-mcpOr install it globally:
npm install -g github:iavjkae/aria2-mcp
aria2-mcpConfiguration
Configuration is read from the environment. The server never ships with a default endpoint and never writes credentials to disk.
Variable | Required | Default | Description |
| yes | — | Full JSON-RPC endpoint, e.g. |
| no | — | Value passed to |
| no |
| Per-request timeout in milliseconds |
ARIA2_RPC_URL must use http or https and must not embed credentials; a value like
http://user:pass@127.0.0.1/jsonrpc is rejected on purpose.
MCP client configuration
{
"mcpServers": {
"aria2": {
"command": "npx",
"args": ["-y", "github:iavjkae/aria2-mcp"],
"env": {
"ARIA2_RPC_URL": "http://127.0.0.1:6800/jsonrpc",
"ARIA2_RPC_SECRET": "your_secret"
}
}
}
}Tools
Tool | Description |
| Queue one or more URIs and return the new GID |
| List active, waiting or stopped downloads |
| Return the full status record for a GID |
| Pause a download |
| Resume a paused download |
| Remove a download and purge its result |
| Aggregate speeds and queue counters |
| aria2 version and compiled features |
Detailed schemas live in docs/tools.md.
Security
Credentials come from the environment only; nothing is committed or logged.
The RPC secret is sent as the standard
token:<secret>parameter and is never echoed back in tool output or error messages.URLs containing embedded credentials are rejected at startup.
test/no-secrets.test.tsfails the build if an endpoint or secret is ever committed.
Development
npm install
npm run lint # ESLint (type-aware)
npm run format # Prettier
npm run typecheck # tsc --noEmit
npm run test # Vitest
npm run test:coverage
npm run build # emits dist/An opt-in integration test runs against a real instance:
ARIA2_RPC_URL=http://127.0.0.1:6800/jsonrpc npm testLicense
Available Tools
8 toolsaria2_add_uriAdd URI downloadA
Queue one or more download URIs (HTTP, HTTPS, FTP, SFTP or magnet links) and return the new GID.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute target directory | |
| out | No | Output file name | |
| uris | Yes | Download URIs to queue | |
| header | No | Extra HTTP headers, for example "Cookie: session=abc" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that multiple URIs are accepted and that a GID is returned, but omits key behavior for a queueing tool: whether the download starts immediately or is merely registered, whether duplicate URIs/exit-on-error apply, and what happens to existing jobs.
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 that names the action, its inputs, and its result with zero filler. Nothing needs trimming and nothing is buried.
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 mention of the returned GID compensates for the absence of an output schema, but with no annotations and no output schema the description should say more about async/blocking behavior and defaults for dir/out before an agent can call it confidently.
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 100%, so the schema already documents dir, out, header and uris. The description only adds the cardinality note (one or more) and the protocol list, which is baseline-level value over structured fields.
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?
States a specific verb (queue) plus resource (download URIs) and enumerates the supported protocols (HTTP, HTTPS, FTP, SFTP, magnet). It also names the primary side effect/return (new GID), so it is immediately distinguishable from sibling tools like aria2_list or aria2_remove.
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 when-to-use guidance, no mention of prerequisites, and no reference to alternatives (e.g., adding via torrent file or metalink). The agent must infer that this is the entry point for starting a download; nothing routes it explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_get_versionaria2 versionA
Return the aria2 version and the features it was built with.
| 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, and it does disclose what the call returns (version string and compiled-in features). It does not explicitly state that it is a side-effect-free read, though that is unambiguous for a version query. Good but not exhaustive.
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 with no filler whatsoever; every word adds 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?
There is no output schema and no annotations, so the description must stand alone, and it sufficiently names both returned items (version and build features). The exact return shape/format is not spelled out, which is a minor gap for such a simple 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?
The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter surface for the description to illuminate or for the schema to omit.
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?
States a specific verb (Return) plus the exact resource (aria2 version and build features). This is clearly distinct from the sibling tools, all of which manage downloads or query status rather than report build/version metadata.
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 when-to-use or alternative guidance, but for a zero-argument version-reporting tool the appropriate usage context is self-evident. Implied usage is the most that can reasonably be expected here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_global_statGlobal statisticsB
Return aggregate download and upload speeds plus queue counters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the kind of data returned (speeds and queue counters) plus implicitly that this is a non-mutating read. It says nothing about rate limiting, freshness/refresh semantics, error behavior, or permission requirements, which would be expected given the absence of annotations.
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 with no filler or redundancy. Every clause (speeds, queue counters) conveys distinct information about the payload.
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 no output schema, the description is the only source of return-value information, and it only names broad categories rather than the actual counters or fields returned. For a simple zero-argument read tool this is workable but not complete enough to tell the agent exactly what it will receive.
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 takes zero parameters, so there is nothing for the description to clarify beyond confirming that it needs no input; the baseline for a parameterless tool is 4. The schema is an empty object, which is consistent with the description.
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?
States a specific verb (Return) and resource (aggregate download/upload speeds plus queue counters), which is concrete and immediately actionable. It does not, however, differentiate itself from the sibling aria2_status or aria2_list, leaving some ambiguity about which statistics source to pick.
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 when-to-use guidance, no prerequisite context, and no mention of alternatives such as aria2_status or aria2_list despite several overlapping-looking siblings. The agent must infer that this is the global/session-wide stats call from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_listList downloadsA
List downloads by state. all returns active, waiting and stopped lists in one response.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Which download queue to inspect | active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that `all` merges active, waiting, and stopped lists into one response, but says nothing about return format beyond that, side effects, or operational constraints.
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?
Two short sentences with the core action front-loaded and the `all` nuance immediately after. No 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 single-parameter read/list tool with full schema coverage and no annotations, the description covers the action and the key enum behavior. It could mention what a list entry contains, but no output schema exists and the complexity is 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?
Schema coverage is 100%, so the schema already defines the `state` enum and default. The description adds meaning only for the `all` value (merging three queues), which is marginal added value over the schema's 'Which download queue to inspect'.
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 ('List downloads') scoped by state, which is immediately actionable. It does not explicitly distinguish itself from siblings like aria2_status or aria2_global_stat, so it falls short of a 5.
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?
Usage is implied by 'List downloads by state' and the default state is inferable from the schema, but there is no explicit guidance on when to use this versus aria2_status or aria2_global_stat, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_pausePause downloadB
Pause an active or waiting download.
| Name | Required | Description | Default |
|---|---|---|---|
| gid | Yes | Download GID returned by aria2_add_uri or aria2_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the state precondition but not the reversibility of the operation, whether the partial file is preserved, whether a paused download can be resumed via aria2_unpause, or what is returned on success/failure.
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 with zero waste that states the action and its scope immediately.
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 one-parameter state-mutation tool with no output schema and no annotations, the description is minimally viable. It says what it does to which downloads but omits the recovery path and any mention of the resume counterpart.
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 100% and the gid parameter is documented in the schema with a pointer to aria2_add_uri/aria2_list. The description adds no parameter-level detail beyond the schema, so the baseline 3 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?
States a specific verb (pause) and resource (download), plus the applicable scope states ('active or waiting'). An agent can distinguish it from aria2_unpause and aria2_remove, though the description never names those siblings explicitly.
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?
'Active or waiting' implies the precondition for use, which is useful context. However, it gives no explicit routing versus aria2_unpause (resume), aria2_remove (cancel), or guidance on what to do if the download already is paused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_removeRemove downloadB
Remove a download and purge its result entry. Set force to interrupt checksum verification.
| Name | Required | Description | Default |
|---|---|---|---|
| gid | Yes | Download GID returned by aria2_add_uri or aria2_list | |
| force | No | Use aria2.forceRemove instead of aria2.remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses a real behavioral consequence beyond the name: the result entry is purged, and force interrupts checksum verification. However, it does not state whether the download must be inactive, whether downloaded files on disk are deleted, or what error occurs on an active GID.
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?
Two short sentences, front-loaded with the primary action and its side effect, with the parameter tip appended last. No filler or redundant restatement of the title.
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?
No output schema and no annotations, so the description must cover behavior; it covers the primary effect and the force semantics but omits the on-disk file outcome and any removal preconditions. Adequate for a two-parameter mutation tool, but there are clear gaps for a destructive operation.
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%, so the baseline is 3, but the description adds genuine semantic meaning over the schema for force: the schema only says 'use aria2.forceRemove instead of aria2.remove', while the description explains the practical effect (interrupting checksum verification). gid is left entirely to the schema, but the schema documents it adequately.
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?
States a specific verb and resource ('Remove a download') plus an additional effect ('purge its result entry'), which distinguishes it from read-oriented siblings like aria2_status or aria2_list. It stops short of naming pause/unpause as the non-destructive alternatives, so no explicit sibling routing.
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 to remove versus pause or unpause a download, nor any precondition (e.g., whether the download must be stopped first). The only usage hint — 'Set force to interrupt checksum verification' — is parameter-level, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_statusDownload statusA
Return the full status record of a single download.
| Name | Required | Description | Default |
|---|---|---|---|
| gid | Yes | Download GID returned by aria2_add_uri or aria2_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and 'Return' plus 'full status record' does convey a non-mutating, complete-payload read. However, it says nothing about behavior on an invalid or expired GID, nor about any side effects or constraints, so coverage is only 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?
A single front-loaded sentence with no filler; the key action and scope come first and 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?
For a one-parameter read tool with no output schema, the description does not indicate what the status record contains or how errors surface. It is adequate to call the tool correctly but leaves an agent guessing about the returned fields.
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 100%, and the gid parameter is already well documented as coming from aria2_add_uri or aria2_list. The description adds no further meaning about the parameter, so the baseline 3 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?
States a specific verb (Return) and resource (the full status record of a single download), which implicitly distinguishes it from aria2_list and aria2_global_stat by scoping to one download. It stops short of naming a sibling explicitly, so it is clear but not maximally differentiated.
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?
Usage is only implied: an agent can infer this is the tool for checking one download's state, contrasting with the list/global siblings. There is no explicit when-to-use statement, no prerequisites, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aria2_unpauseResume downloadC
Resume a paused download.
| Name | Required | Description | Default |
|---|---|---|---|
| gid | Yes | Download GID returned by aria2_add_uri or aria2_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but discloses almost nothing beyond the basic action. It does not say what happens if the GID is not paused, whether the operation is idempotent, what errors surface, or what the response contains.
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 short sentence with zero filler, front-loading the action and object. It earns its place but is so terse that brevity shades into under-specification.
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 one-parameter tool with a fully documented schema and no output schema, the description is minimally adequate. It is thin on what actually happens during resume and any failure modes, but nothing structurally required to call it is missing.
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 100% for the single gid parameter, which the schema already documents as the GID returned by aria2_add_uri or aria2_list. The description adds no further parameter meaning, so the baseline of 3 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?
States a specific verb and resource (resume a download), which is unambiguous on its own. It does not explicitly name its counterpart aria2_pause among siblings, though the phrase 'paused download' implies the pairing.
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 when-to-use or when-not-to-use guidance, and no explicit reference to alternatives such as aria2_pause or aria2_list. Usage is only implied by the word 'paused'.
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.
8 tool updates
v0.1.0- First observed
aria2_add_uri - First observed
aria2_get_version - First observed
aria2_global_stat - First observed
aria2_list - First observed
aria2_pause - First observed
aria2_remove - First observed
aria2_status - First observed
aria2_unpause
TDQS
Scored across 8 tools
Each tool targets a distinct aria2 operation: add, remove, pause, unpause, list, status, global_stat, and get_version. Collection vs. single-download vs. aggregate reporting tools are clearly separated by their descriptions.
All tools share the aria2_ prefix and snake_case formatting, which is highly consistent. However, the verb/noun pattern is mixed: some are verbs (remove, pause, unpause, list), some are noun-only (status, global_stat), and some are verb_noun (add_uri, get_version).
Eight tools is well-scoped for an aria2 download management server. Each tool covers a core, non-redundant operation without excessive surface area.
The surface covers the core download lifecycle: add, pause, resume, remove, and query status/list/aggregate stats. Minor gaps exist for update/configuration operations (e.g., changing download or global options, session management) that agents could work around or that may be out of scope.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
All 20 YourAITools agent APIs in one MCP server. Most tools free; pay with credits or x402.
Agent-native catalogue of Baseframe Labs dev tools and MCP servers.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA download tool for AI agents that wraps aria2 with safety rules and MCP server support, enabling reliable downloads without false positives.1MIT
- AlicenseNot gradedqualityCmaintenanceProvides 20 essential tools including HTTP requests, web search, file I/O, shell commands, and persistent memory for any MCP client, with zero configuration required.MIT
- AlicenseAqualityAmaintenanceMCP server exposing qBittorrent's WebUI API v2 as tools, enabling LLMs to manage torrents, categories, tags, RSS feeds, search plugins, and application settings.903MIT
- AlicenseAqualityBmaintenanceEnables AI agents and CLI tools to dispatch downloads through Chrome's native download engine over the MCP protocol, automatically inheriting browser cookies, login sessions, and proxy settings. Supports submitting, monitoring, pausing, resuming, and cancelling download tasks locally without manual server setup.8MIT