Skip to main content
Glama

sf-mm-mcp

An MCP server that exposes moviemagnet.site (movies) and showfeed.site (TV shows) to LLM clients, with put.io as the download backend.

Search a title, find magnet links ranked by seeders, and start the download on put.io — all from inside Claude Desktop, Claude Code, opencode, or any other MCP client.

npx sf-mm-mcp login    # one-time put.io sign-in
npx sf-mm-mcp          # start the server on stdio
npx sf-mm-mcp http     # ...or on streamable HTTP, for clients that connect by URL

Setup

1. Add the server to your MCP client

The put.io app id (9525) is built in, so there is nothing to configure for a default install.

Claude Desktop (claude_desktop_config.json), Claude Code (.mcp.json), and opencode (opencode.json) all use the same shape:

{
  "mcpServers": {
    "sf-mm": {
      "command": "npx",
      "args": ["-y", "sf-mm-mcp"]
    }
  }
}

opencode

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sfmm": {
      "type": "local",
      "command": ["npx", "-y", "sf-mm-mcp"],
      "enabled": true
    }
  }
}

opencode prefixes tool names with the server name, so the tools appear as sfmm_movies_search, sfmm_putio_login, and so on. Verify the connection with opencode mcp list.

Note that opencode mcp auth does not apply here. That command drives OAuth for remote MCP servers via dynamic client registration; this is a local stdio server that manages its own put.io credential. Use the sign-in below instead.

See docs/clients.md for Cursor, VS Code, Windsurf, Zed, Cline and others.

2. Sign in

Either run npx sf-mm-mcp login in a terminal, or ask your assistant to call the putio_login tool and follow the instructions it returns.

putio_login is non-blocking by design, so the in-chat flow works: the tool returns a code immediately, you enter it at put.io/link, and putio_auth_status confirms. The token is stored per-machine, so signing in once covers every MCP client on that machine.

Related MCP server: M-Team MCP Server

Authentication

The default is put.io's OOB (out-of-band) device flow: the server requests a short code, you enter it at https://put.io/link, and the server polls until it is linked.

This is the default rather than the more familiar redirect flow for a specific reason: an npx-distributed package cannot hold a client secret. Anything baked into the tarball is readable by everyone who installs it. The OOB flow needs no secret and no loopback listener, so it also works over SSH and inside containers.

If you control the environment and prefer the redirect flow, set:

SF_MM_AUTH_FLOW=loopback
PUTIO_CLIENT_SECRET=...          # supply it yourself; never commit it
PUTIO_REDIRECT_URI=http://127.0.0.1:41830/callback

The redirect URI must match one registered on your put.io app. state is generated per handshake and verified on the callback.

Where the token is stored

In order of preference:

  1. PUTIO_TOKEN environment variable, if set (nothing is persisted).

  2. OS keychain — macOS Keychain via security, Linux via secret-tool.

  3. A 0600 file at ~/.config/sf-mm-mcp/token.json.

npx sf-mm-mcp status reports which backend is in use. npx sf-mm-mcp logout clears it.

Tools

Discovery — no sign-in required

Tool

Purpose

movies_search

Find movies by title, returns IMDb ids

movies_get

Full details for one movie

movies_popular

Most-viewed movies on moviemagnet.site

shows_search

Find TV shows by title

shows_get

Show details plus episode list, optionally one season

shows_popular

Most-viewed shows on showfeed.site

Torrents — sign-in required

Tool

Purpose

movies_find_torrents

Magnets for a movie, filterable by resolution and seeders

shows_find_torrents

Magnets for a show, filterable by season, episode, resolution

Results are normalised to {title, magnet, sizeHuman, seeders, resolution, season, episode, ageDays} and sorted by seeder count.

put.io — sign-in required

Tool

Purpose

putio_add_transfer

Start a download from a magnet or URL

putio_list_transfers

List transfers with progress

putio_get_transfer

Poll a single transfer

putio_cancel_transfers

Cancel or remove transfers

putio_clean_transfers

Clear completed transfer entries

putio_account

Username and disk usage

putio_list_files

Browse files and folders

favorites_list / favorites_update

Read and edit the favorites list

Favorites are stored in the put.io account config under the same favorites key the two websites use, so the list stays in sync across all three.

Auth

putio_login, putio_auth_status, putio_logout.

putio_login returns instructions immediately rather than blocking — waiting for a human to finish a browser flow would hold the tool call open for minutes and most clients time out first. Poll putio_auth_status to confirm.

Configuration

All optional.

Variable

Default

Purpose

PUTIO_CLIENT_ID

9525

put.io OAuth app id (public); override to use your own app

PUTIO_TOKEN

Use a token directly, skipping sign-in

SF_MM_AUTH_FLOW

oob

oob or loopback

PUTIO_CLIENT_SECRET

Only for loopback

PUTIO_REDIRECT_URI

http://127.0.0.1:41830/callback

Only for loopback

MOVIEMAGNET_BASE_URL

https://moviemagnet.site

Point at a dev instance

SHOWFEED_BASE_URL

https://showfeed.site

Point at a dev instance

PUTIO_API_BASE_URL

https://api.put.io/v2

SF_MM_CONFIRM_TRANSFERS

false

Require confirm=true on putio_add_transfer

SF_MM_TORRENT_CACHE_TTL

900

Torrent result cache, seconds

SF_MM_METADATA_CACHE_TTL

3600

Metadata cache, seconds

SF_MM_TOKEN_STORE

auto

auto/keychain/file/none; none disables persistence

SF_MM_LOG_LEVEL

info

debug/info/warn/error/silent

SF_MM_TRANSPORT

stdio

stdio or http (same as the http subcommand)

SF_MM_HTTP_HOST

127.0.0.1

HTTP mode bind address

SF_MM_HTTP_PORT

8009

HTTP mode port

SF_MM_HTTP_PATH

/mcp

HTTP mode endpoint path

SF_MM_HTTP_TOKEN

Require Authorization: Bearer <token> in HTTP mode

Transports

stdio (default) is what desktop MCP clients spawn. Streamable HTTP is for clients that connect by URL and cannot spawn a process — Open WebUI, for example:

SF_MM_HTTP_TOKEN=$(openssl rand -hex 32) npx -y sf-mm-mcp http
# → http://127.0.0.1:8009/mcp

GET /health is available for supervisors and returns the running version.

HTTP mode shares one put.io account across every client that can reach the port. Unlike stdio, where the server belongs to a single desktop user, there is no per-user authorization: anyone who can call the endpoint can spend the linked account's storage and bandwidth. It therefore binds to loopback by default and refuses nothing else — bind wider only together with SF_MM_HTTP_TOKEN, and consider SF_MM_CONFIRM_TRANSFERS=true.

See docs/clients.md for the Open WebUI setup and a systemd unit.

Caching and rate limits

Both websites validate the put.io token on every /api/torrent request, and that endpoint fans out to torrent indexers. An LLM will call these far more eagerly than a human clicking through a web page, so this server:

  • caches torrent results (15 min) and metadata (1 hour) in process,

  • de-duplicates concurrent identical requests,

  • caches token-validation results for 10 minutes rather than revalidating per call,

  • honours put.io's 429 plus X-RateLimit-Reset headers with backoff,

  • never retries a write, so a transfer cannot be silently created twice.

Development

npm install
npm run build
npm run typecheck
npm test           # boots the server, asserts tool surface; no network
npm run smoke      # exercises the live public endpoints over MCP stdio

npm test is network-free on purpose, so CI does not go red because a torrent indexer is having a bad day. It runs with SF_MM_TOKEN_STORE=none so it cannot accidentally pick up a developer's real token and skip the auth-gating checks.

Releasing

npm version patch && git push --follow-tags

Publishing runs from GitHub Actions on a version tag. There is no npm token anywhere: the workflow authenticates with npm via OIDC trusted publishing, which also generates a provenance attestation automatically.

npm version patch     # or minor / major - commits and tags
git push --follow-tags

.github/workflows/publish.yml then refuses to continue unless:

  • the tag matches package.json version exactly,

  • that version is not already on npm,

  • typecheck, build and the tool-surface test all pass,

  • no .env file made it into the tarball.

To rehearse without publishing, run the workflow manually from the Actions tab with dry-run left checked. Full detail in docs/releasing.md.

Documentation

docs/architecture.md

Design decisions and why the alternatives lost

docs/auth.md

Credential model; why there is no client secret

docs/upstream-apis.md

The two sites' API surface and its quirks

docs/clients.md

Configuration for every common MCP client

docs/releasing.md

Release procedure and CI guards

Agents should start at AGENTS.md.

Point at local dev servers with MOVIEMAGNET_BASE_URL=http://localhost:5173.

Notes on the upstream APIs

Neither site publishes a schema, so the shapes in src/schemas.ts were derived by reading the SvelteKit route handlers and probing the live endpoints. Two things worth knowing:

  • Both sites expect the put.io token in a bare Authorization header with no Bearer prefix. This client matches that.

  • Neither site has a "create transfer" endpoint — the web apps do it client-side. So transfers, account info, and favorites go directly to api.put.io.

Validation failures are logged rather than swallowed, so upstream schema drift shows up as a warning on stderr instead of a silent "no results found".

A bug this client used to work around

Both sites once returned 500 on the first request for any given title, because torrentService.js destructured the Jackett response as const { instance, data: results } — declaring a new block-scoped results that shadowed the outer one, leaving it undefined on every cache miss. It hid well: the shadowed value was still written to Redis, so a retry hit the cache and succeeded. Titles with zero indexer results were never cached and so failed permanently.

Fixed and deployed in both apps (showfeed-app@6640310, moviemagnet-app@77b22fe), along with queryMultipleServices, which only ever called resolve and therefore hung forever if every indexer failed.

The 5xx retry in this client predates those fixes. It is kept because indexers still fail transiently, but it is no longer masking a deterministic upstream failure. Full write-up in docs/upstream-apis.md.

Credits

Logo icons from pepicons by CyCraft, licensed CC BY 4.0. See assets/README.md.

Available Tools

20 tools
favorites_listList favoritesA
Read-only

Lists the IMDb ids favorited in the put.io account config. This is the same list shown on showfeed.site and moviemagnet.site.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description does not need to repeat that. It adds a small behavioral detail about consistency with external sites, but no deeper context like permissions or side effects. This is acceptable but not exceptional.

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?

Two sentences with the primary action stated first. No filler. It is appropriately concise for such a simple tool.

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?

For a zero-parameter, read-only list tool with no output schema, the description fully conveys what the response contains (IMDb ids). It is complete enough for an agent to understand the tool's purpose and expected return value.

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 baseline is 4. The description does not need to compensate for schema gaps, and it correctly avoids inventing unnecessary parameter details.

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 ('Lists') and a clear resource ('IMDb ids favorited in the put.io account config'). It also distinguishes from sibling favorites_update by focusing on listing rather than modifying.

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 description gives clear context about what this tool does and even adds that it matches the list shown on showfeed.site and moviemagnet.site. It does not explicitly mention alternatives or exclusions, but the use case is obvious.

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

favorites_updateAdd or remove a favoriteA
Idempotent

Adds or removes an IMDb id from the favorites list stored in the put.io account config.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhether to add or remove the id.
imdbIdYesIMDb id to add or remove, e.g. tt0306414.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and idempotentHint=true, covering the mutation and retry safety. The description adds context that the favorites list is stored in the put.io account config, which is useful but does not disclose additional behavioral traits such as error handling or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the main action and resource. It is concise, clear, and contains no unnecessary words 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?

Given the tool's simplicity, full schema coverage, and annotations, the description is quite complete. It explains the modification target and storage location. It does not mention specific error behavior or duplicate handling, but these are not essential given the idempotentHint annotation.

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

Parameters3/5

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

The input schema provides complete descriptions for both parameters (imdbId and action), covering 100% of the schema. The description only restates the action types and resource, adding minimal semantic value beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Adds or removes') and the resource ('IMDb id from the favorites list stored in the put.io account config'). It effectively distinguishes itself from sibling tools such as favorites_list by indicating a mutation operation rather than a listing operation.

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 description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that favorites_list should be used for viewing, nor any preconditions or context for adding/removing favorites. Usage is implied only by the tool name and verb.

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

movies_find_torrentsFind movie torrentsA
Read-only

Searches torrent indexers for a movie by IMDb id and returns magnet links sorted by seeder count. Requires a put.io sign-in. Pass a magnet to putio_add_transfer to start downloading.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return.
imdbIdYesIMDb id of the movie, e.g. tt0083658.
minSeedersNoDrop results with fewer seeders than this. 5 is a reasonable floor.
resolutionsNoRestrict results to these resolutions. Omit to include all.
strictTitleMatchNoDiscard results whose title does not closely match the movie name.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: results are magnet links sorted by seeder count, and sign-in is required. No contradiction with annotations; the additional details exceed what structural fields convey.

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?

Two sentences, no fluff. The first sentence front-loads the primary action and output, and the second covers the prerequisite and downstream call. Every word earns its place.

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?

The description covers the main behavior, output format, sorting, sign-in requirement, and suggested next step. With no output schema, this is sufficient for a read-only search tool; minor gaps like default limit and error handling are covered by the schema or are not critical.

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

Parameters3/5

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

Schema description coverage is 100% for all 5 parameters, so the description need not reiterate parameter details. It only mentions IMDb id, which is already documented in the schema. As no extra parameter semantics are added, baseline 3 is appropriate.

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

Purpose5/5

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

Description states it searches torrent indexers for a movie by IMDb id and returns magnet links sorted by seeder count. This clearly identifies the tool's purpose and distinguishes it from sibling tools like shows_find_torrents and putio_add_transfer.

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 description specifies a prerequisite (requires put.io sign-in) and a follow-up workflow (pass magnet to putio_add_transfer). While it doesn't explicitly contrast with alternative tools, the movie-focused IMDb-id search makes the intended use clear.

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

movies_getGet movie detailsA
Read-only

Fetches full details for a single movie by IMDb id from moviemagnet.site. No sign-in required.

ParametersJSON Schema
NameRequiredDescriptionDefault
imdbIdYesIMDb id, e.g. tt0083658.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral context beyond annotations: 'No sign-in required' and 'from moviemagnet.site,' which indicates the data source. This is valuable context for the agent regarding auth and provenance, though it doesn't describe response format or error behavior.

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 sentence, front-loaded with the action ('Fetches full details'), and every word contributes meaning. It's appropriately succinct with 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 simple single-parameter read operation with annotations covering safety, the description covers the essential context: source, auth requirement, and scope (single movie by ID). It doesn't explain return values, but no output schema exists, and the tool's simplicity makes this acceptable. Sibling tools clarify domain boundaries.

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

Parameters3/5

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

The schema provides a 100% description of the sole parameter (imdbId: 'IMDb id, e.g. tt0083658'), so the description doesn't need to add parameter details. The tool description reinforces 'by IMDb id' but adds no new semantics beyond the schema, which matches the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Fetches full details for a single movie by IMDb id.' It specifies the resource (movie), the operation (fetch), and the identifier (IMDb id), which distinguishes it from sibling tools like movies_search (search across movies) and movies_popular (list popular movies).

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 description implies when to use it: when you have a known IMDb ID and need details for a single movie. It also notes 'No sign-in required,' indicating no authentication is needed. However, it does not explicitly mention alternatives or exclusions, such as recommending movies_search when you don't have an ID, so it falls short of the highest bar.

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

putio_accountGet put.io account infoA
Read-only

Returns the signed-in put.io username and remaining disk space.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint and openWorldHint, so the description adds the signed-in context and specific return fields (username, disk space). This goes beyond annotations without contradicting them, providing useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence front-loads the verb and states the two key return values. Every word earns its place with no unnecessary detail.

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?

For a zero-parameter read-only tool, the description fully explains what it returns. Since no output schema exists, the explicit mention of username and disk space satisfies completeness.

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 and schema coverage is 100%, so the baseline is 4. The description adds no parameter detail, but none is needed given the empty schema.

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

Purpose5/5

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

The description clearly states the tool 'Returns the signed-in put.io username and remaining disk space,' with a specific verb and resource. This distinguishes it from sibling tools like putio_auth_status or putio_login.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as putio_auth_status or putio_login. The description implies a signed-in context but does not explicitly contrast with other account-related tools.

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

putio_add_transferAdd a transfer to put.ioA

Starts a download on put.io from a magnet link or HTTP URL, typically one returned by movies_find_torrents or shows_find_torrents. This spends the account's bandwidth and storage, so confirm the choice with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesMagnet URI or direct HTTP(S) URL. Use the `magnet` field from a torrent search result.
confirmNoMust be true when the server runs with SF_MM_CONFIRM_TRANSFERS enabled.
saveParentIdNoput.io folder id to save into. Omit to use the account default download folder.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, etc.), the description adds critical side effects: 'spends the account's bandwidth and storage' and requires user confirmation. This is valuable context not inferable from annotations alone.

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?

Two sentences deliver the action, typical use, cost, and confirmation requirement without redundancy. Well-structured and front-loaded.

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?

Covers the core behavior, use case, and important cautions. With a 3-param schema and no output schema, the description is sufficient, though it doesn't mention progress tracking or cancellation alternatives.

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

Parameters3/5

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

Schema descriptions already cover all parameters (100% coverage), including the meaning of url, confirm, and saveParentId. The description does not add new parameter-level details beyond what's in the schema.

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

Purpose5/5

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

The description clearly states 'Starts a download on put.io from a magnet link or HTTP URL' with a specific verb and resource. It also mentions typical sources (movies_find_torrents, shows_find_torrents), distinguishing it from sibling putio management tools.

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?

Provides context that this tool is typically used after torrent searches from movies_find_torrents or shows_find_torrents, and instructs to confirm with the user first. It does not explicitly list alternatives or when not to use it, but the use case is clear.

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

putio_auth_statusCheck put.io sign-in statusA
Read-only

Reports whether a valid put.io token is stored, and the progress of any sign-in started by putio_login.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, lowering the burden. The description adds behavior beyond annotations: it tells that a token may be stored and that sign-in progress is tracked. No contradictions.

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, well-structured sentence that front-loads the action and includes the key concept of sign-in progress. No unnecessary words.

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

Completeness4/5

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

Given the simple nature (0 params, no output schema), the description adequately explains what it reports (token validity and sign-in progress). It could specify the exact return format, but for a status checker this is sufficient.

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. The description correctly avoids parameter details and focuses on the tool's purpose, which is 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?

Description uses a specific verb ('Reports') with a clear resource (put.io auth status). It distinguishes from sibling tools like putio_login and putio_logout by focusing on token storage and sign-in progress.

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 description implies usage context by referencing putio_login, indicating this tool checks the outcome of a sign-in. It provides clear context but does not explicitly state when not to use it or list alternatives.

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

putio_cancel_transfersCancel put.io transfersA
DestructiveIdempotent

Cancels or removes transfers by id. Stops seeding if the transfer is seeding, otherwise removes the transfer entry. Downloaded files are not deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
transferIdsYesTransfer ids to cancel.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (destructive, non-readonly, idempotent), the description adds crucial behavioral details: it distinguishes between stopping seeding and removing an entry based on state, and explicitly states that downloaded files are not deleted. This gives the agent a clear understanding of the side effects without relying solely on annotations.

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 three short, purposeful sentences. It is front-loaded with the core action, then explains conditional behavior, and ends with a key non-effect. No words are wasted.

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?

For a simple tool with one parameter, no output schema, and annotations already covering safety, the description is complete. It explains what happens to seeding transfers, non-seeding transfers, and explicitly clarifies that files are not deleted. Nothing relevant is missing.

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

Parameters3/5

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

The input schema already covers 100% of the parameters, including a description for 'transferIds' ('Transfer ids to cancel'). The tool description only says 'by id', which adds no new information beyond the schema. Baseline 3 applies because the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the action ('Cancels or removes transfers by id') with a specific verb and resource. It also differentiates the behavior between seeding and non-seeding transfers, distinguishing it from sibling tools like putio_clean_transfers. This is specific and unambiguous.

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 description provides clear context on when to use this tool: when you have specific transfer IDs and want to cancel or remove them. It also gives an important exclusion ('Downloaded files are not deleted') which guides expectations. However, it does not explicitly mention alternatives or contrast with siblings like putio_clean_transfers, so it stops short of a 5.

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

putio_clean_transfersClear completed put.io transfersA
DestructiveIdempotent

Removes all completed transfer entries from the transfer list. Downloaded files are not deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds valuable context by clarifying 'Downloaded files are not deleted', which directly addresses a common concern. It also specifies 'all' transfers, indicating broad scope. This goes beyond the annotations without contradicting them.

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?

Two sentences, both essential. The first sentence states the core action, and the second adds a critical caveat about files not being deleted. No wasted words, and the structure is front-loaded with the primary verb.

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?

For a zero-parameter, no-output-schema tool, the description fully explains the behavior and a key edge case. Combined with rich annotations (destructive, idempotent) and clear sibling context, the description is complet for an agent to invoke 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 tool has zero parameters, so the baseline is 4. The description correctly focuses on behavior rather than parameters, as there is nothing to explain. No parameter information is needed.

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

Purpose5/5

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

The description states a specific verb ('removes') and resource ('completed transfer entries from the transfer list'), clearly distinguishing it from sibling tools like putio_cancel_transfers (which cancels transfers) and putio_list_transfers (which lists them). The scope is precise: 'all completed' entries, and the title reinforces the action.

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 its use case (cleaning up completed transfers) but does not explicitly contrast it with alternatives or provide when-not-to-use guidance. Sibling tools like putio_cancel_transfers are mentioned in the context, but the description itself does not direct the agent to prefer this tool for completed entries or avoid it for active ones.

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

putio_get_transferGet a put.io transferA
Read-only

Fetches up-to-date details for a single transfer, useful for checking download progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
transferIdYesThe transfer id returned by putio_add_transfer or putio_list_transfers.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds the 'up-to-date' aspect and the download-progress use case, but does not disclose return format or potential caveats. With annotations covering safety, this is acceptable but not extensive.

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?

One concise sentence, front-loaded with the action and resource, and zero wasted words. It immediately communicates the tool's purpose and use case.

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 single-transfer read operation with annotations and a described parameter, the description is sufficient. It could mention what fields are returned, but the use case (progress) implies the payload. Given the tool's simplicity, it's adequately complete.

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

Parameters3/5

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

Schema coverage is 100%; the transferId parameter has a clear description referencing where to obtain it. The tool description adds no additional parameter semantics, so the baseline of 3 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 clearly states the tool fetches details for a single transfer, with a specific use case of checking download progress. This distinguishes it from siblings like putio_list_transfers, which lists all transfers.

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 description implies use when needing up-to-date details for one specific transfer, but does not explicitly name alternatives or state when not to use. The 'single transfer' and 'up-to-date' wording provides clear context among sibling tools.

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

putio_list_filesList put.io filesA
Read-only

Lists files and folders in the put.io account. Pass a folder id to browse into it.

ParametersJSON Schema
NameRequiredDescriptionDefault
parentIdNoFolder id. 0 is the account root.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds the folder-browsing behavior but does not disclose details like pagination, response structure, or potential variability. With annotations in place, this is adequate but not rich.

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, tightly worded sentence: 'Lists files and folders in the put.io account. Pass a folder id to browse into it.' Every phrase earns its place; there is no fluff or redundancy.

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 read-only tool with one optional parameter and no output schema, the description is complete enough. It explains the main behavior and parameter usage. It does not detail the returned items' format, but that is not required given the tool's simplicity and the absence of an output schema.

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

Parameters3/5

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

The input schema already describes parentId ('Folder id. 0 is the account root.'). The tool description's statement 'Pass a folder id to browse into it' adds contextual meaning but does not introduce new information beyond the schema's description. With 100% schema coverage, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Lists files and folders in the put.io account'—a specific verb and resource. It also distinguishes from siblings like putio_list_transfers by focusing on files/folders rather than transfers.

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 description provides clear usage context by explaining how to browse into folders: 'Pass a folder id to browse into it.' It does not explicitly name alternatives or exclusions, but the scope is obvious enough for a simple list tool.

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

putio_list_transfersList put.io transfersA
Read-only

Lists current and recent transfers on the signed-in put.io account, with download progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum transfers to return.
statusNoFilter by status, e.g. DOWNLOADING, COMPLETED, SEEDING, ERROR, IN_QUEUE.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation. The description adds a small extra detail ('with download progress') that hints at output content, but does not disclose additional behavioral traits such as pagination, response size limits, or how 'current' vs 'recent' is determined. This is consistent with annotations and adds some value beyond them.

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 sentence of 14 words, front-loaded with the core action and resource. It wastes no words and is immediately informative, earning a high score for efficiency and clarity.

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 low-complexity list tool with two optional parameters and no output schema, the description is largely complete: it states the resource, scope, and an output feature. It doesn't explain return structure, but that's not required given the absence of an output schema. The annotation-driven safety profile is well covered; the only missing element is explicit guidance on how 'current' and 'recent' are separated, but this is not critical for invocation.

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

Parameters3/5

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

The input schema fully documents both parameters (limit and status) with descriptions and constraints, providing 100% coverage. The description does not mention parameters directly, so it adds no extra semantic value over the schema. The baseline of 3 applies because the schema carries the meaning.

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 the specific verb 'Lists' with a clear resource ('transfers on the signed-in put.io account'), distinguishing it from siblings like putio_get_transfer (which fetches a single transfer) and putio_add_transfer (which creates transfers). It also adds scope ('current and recent') and output detail ('with download progress'), making the tool's purpose unambiguous.

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 implicitly conveys when to use the tool (to view transfers and their progress) but does not explicitly contrast it with alternatives like putio_get_transfer for a single transfer or putio_clean_transfers for cleanup. No exclusions or 'use instead' guidance is provided, so the usage context is clear but not fully elaborated.

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

putio_loginSign in to put.ioA

Starts the put.io sign-in flow and returns instructions for the user to complete it in a browser. Call putio_auth_status afterwards to confirm completion. Required before searching torrents or creating transfers.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoStart a new sign-in even if a valid token is already stored.

TDQS

A4.5/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: it is an async browser-based flow, needs user interaction, and requires a follow-up status check. This complements readOnlyHint=false and openWorldHint=true. It does not mention token overwriting, but that is a minor omission.

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 two concise sentences. The first states the primary function, the second provides follow-up and prerequisite guidance. Every phrase earns its place with no redundancy.

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?

For a login tool with one optional param and no output schema, the description is fully complete: it covers purpose, the interactive browser nature, the follow-up status check, and the dependency on this tool for other actions. The agent has all necessary context.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'force' parameter, so the schema already provides clear meaning. The tool description adds no additional parameter context, matching the baseline for fully self-documenting schema.

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

Purpose5/5

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

The description clearly states the tool 'Starts the put.io sign-in flow' and that it returns browser instructions for the user. This specific verb+resource phrasing, combined with the mention of a follow-up status check, distinguishes it from sibling tools like putio_auth_status and putio_logout.

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

Usage Guidelines5/5

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

Explicit usage context is provided: 'Required before searching torrents or creating transfers' and 'Call putio_auth_status afterwards to confirm completion.' This gives clear when-to-use instructions and defines the expected workflow relative to sibling tools.

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

putio_logoutSign out of put.ioA
Destructive

Deletes the stored put.io token from the OS keychain or credential file.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true, but the description adds value by specifying exactly what is deleted (the stored token) and where (OS keychain or credential file), which clarifies the scope of destruction. This goes beyond the annotation's generic destructive flag.

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 is front-loaded with the action ('Deletes the stored put.io token') and includes only essential detail. No redundant words or clutter.

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?

For a simple no-parameter, no-output-schema tool, the description is complete. It clearly defines the action, the affected resource, and the storage location, leaving no ambiguity about what the tool does.

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 description does not need to explain parameter details. The baseline for no parameters is 4, and the description appropriately focuses on the action rather than non-existent inputs.

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

Purpose5/5

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

The description clearly states the tool deletes the stored put.io token from the OS keychain or credential file, which is a specific verb and resource. It distinguishes itself from siblings like putio_login and putio_auth_status by describing the logout action explicitly.

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 title 'Sign out of put.io' and description provide clear context for when to use this tool: to end a put.io session by clearing stored credentials. It does not explicitly mention alternatives or exclusions, but the use case is unambiguous and not misleading.

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

shows_find_torrentsFind TV show torrentsA
Read-only

Searches torrent indexers for a show by IMDb id and returns magnet links sorted by seeder count. Filter to a specific season and episode to find a single airing. Requires a put.io sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return.
imdbIdYesIMDb id of the show, e.g. tt0306414.
seasonNoRestrict results to this season number.
episodeNoRestrict results to this episode number. Requires season to be meaningful.
minSeedersNoDrop results with fewer seeders than this.
resolutionsNoRestrict results to these resolutions. Omit to include all.
strictTitleMatchNoDiscard results whose title does not closely match the show name.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is established. The description adds valuable behavioral details: it returns magnet links sorted by seeder count and requires authentication. This goes beyond the annotations without contradicting them.

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?

Two sentences, front-loaded with the primary action, then a usage tip and a prerequisite. Every sentence earns its place with no repetition of schema metadata.

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?

Despite lacking an output schema, the description states the return type (magnet links), sorting (by seeder count), and input requirements (IMDb id, optional filters). It does not detail error handling or result format beyond this, but for a search tool with rich schema coverage it is sufficiently complete.

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?

Schema coverage is 100%, so the baseline is 3. The description adds semantic meaning by explaining that season/episode filtering targets a single airing, which clarifies the intent behind those parameters. It also frames the output as sorted by seeder count, giving context to minSeeders.

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 opens with a specific verb ('Searches torrent indexers') and identifies the resource (a show by IMDb id). It clearly distinguishes itself from sibling tools like movies_find_torrents by specifying TV shows, and from shows_search by stating it returns magnet links rather than metadata.

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 description gives a concrete usage example ('Filter to a specific season and episode to find a single airing') and a prerequisite ('Requires a put.io sign-in'). It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.

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

shows_getGet TV show detailsA
Read-only

Fetches details for a single show by IMDb id, including its full episode list. No sign-in required.

ParametersJSON Schema
NameRequiredDescriptionDefault
imdbIdYesIMDb id, e.g. tt0306414.
seasonNoReturn episodes from this season only.
includeEpisodesNoInclude the episode list. Set false for a compact response on long-running shows.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, openWorldHint), the description adds 'No sign-in required' and explicitly mentions the inclusion of the full episode list, providing nontrivial behavioral context. It doesn't cover return format or error cases, but the annotations already indicate a safe read operation.

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 two sentences, front-loaded with the primary purpose, and the second sentence adds a concise auth note. There are no redundant or unnecessary words.

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

Completeness4/5

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

Given the tool's simplicity, good annotations, and complete parameter schema, the description adequately covers the primary purpose, auth, and episode list inclusion. Since there is no output schema, a bit more detail on return shape could help, but the current description is sufficient for a straightforward read-only fetch.

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

Parameters3/5

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

All three parameters (imdbId, season, includeEpisodes) are fully described in the input schema, and the description adds no additional meaning or examples. Thus the baseline score of 3 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 the specific verb 'Fetches' with a clear resource: 'details for a single show by IMDb id'. It explicitly distinguishes this tool from siblings like shows_search and shows_popular by emphasizing the single-show lookup and the inclusion of the full episode list.

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?

Clear context is provided that this tool is for fetching details for a specific show when you have its IMDb id. While it doesn't explicitly name alternatives or exclusions, the 'by IMDb id' phrasing makes the intended use obvious.

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. Dates show when Glama detected each change.

  1. 20 tool updatesv0.1.2
    • First observedfavorites_list
    • First observedfavorites_update
    • First observedmovies_find_torrents
    • First observedmovies_get
    • First observedmovies_popular
    • First observedmovies_search
    • First observedputio_account
    • First observedputio_add_transfer
    • First observedputio_auth_status
    • First observedputio_cancel_transfers
    • First observedputio_clean_transfers
    • First observedputio_get_transfer
    • First observedputio_list_files
    • First observedputio_list_transfers
    • First observedputio_login
    • First observedputio_logout
    • First observedshows_find_torrents
    • First observedshows_get
    • First observedshows_popular
    • First observedshows_search

TDQS

A3.9/5.0
Disambiguation4/5

Tools are cleanly namespaced by domain (movies_, shows_, putio_, favorites_) and each targets a distinct resource or action. The only potential source of confusion is putio_clean_transfers versus putio_cancel_transfers, but their descriptions clearly separate bulk cleanup of completed entries from targeted cancellation/removal.

Naming Consistency4/5

Most tools follow a consistent [resource]_[action] pattern, with actions like get, search, add, list, cancel, update. A few outliers use adjectives or nouns for the suffix (movies_popular, putio_account, putio_auth_status), which breaks the verb_noun convention, but the overall prefix scheme remains predictable.

Tool Count3/5

With 20 tools, the server is at the heavy end of the scale, but the count is justified by the multiple subdomains (movies, shows, put.io, favorites). It borders on feeling bloated, yet each tool serves a distinct function and the logical grouping helps manageability.

Completeness4/5

The tool surface covers the core lifecycle for discovering media, finding torrents, managing put.io transfers, and maintaining favorites. Notable minor gaps include no direct file deletion or transfer pause/resume, but these are workarounds.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Giving AI assistants the ability to search movies and TV shows, find torrents with magnet links, check streaming availability, and explore cast/crew metadata.
    12
    10
    17
    12
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to interact with the M-Team private torrent tracker API for searching resources, retrieving torrent details, and downloading torrent files. It provides a bridge for Model Context Protocol clients to manage and access private tracker content through natural language.
    3
    10
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/githendrik/sf-mm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server