Koskamo

Subtensor MCP

An official Model Context Protocol server for the Subtensor blockchain, providing AI agents with tools to search, lookup, list, explore, explain, and decode blockchain data including pallets, events, calls, storage, constants, and errors.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Subtensor MCP logo, by BittensorVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Bittensor
MCP endpoint (Streamable HTTP)
https://subtensor.com/mcp
Vendor documentation

What you can do with it

  • Search across all Subtensor pallets, events, calls, storage, constants, and errors by keyword.
  • Get detailed info about a specific pallet, event, call, storage item, constant, error, SCALE type, RPC method, protocol account, or EVM precompile.
  • Decode SCALE-encoded hex into labelled fields with RAO→TAO and hex→SS58 conversions applied.

Source and maintenance

Vendor evidenceRegistry 2.0.0

Protocol and capabilities

Server
subtensor 2.0.0
MCP protocol
2025-06-18
Tools
7 advertised
Resources
20 advertised
Resource templates
9 advertised
Prompts
11 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "extensions": {
    "io.modelcontextprotocol/ui": {
      "mimeTypes": [
        "text/html;profile=mcp-app"
      ]
    }
  },
  "completions": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Subtensor Reference API — Bittensor blockchain documentation. Runtime v486, 28 pallets, 1596+ items. 7 tools, all accept format="text"|"json". DISCOVERY PATTERN: 1. subtensor_list(category="pallets") → see all pallets 2. subtensor_lookup(type="pallet", name="SubtensorModule") → item names 3. subtensor_lookup(type="event", pallet="SubtensorModule", name="StakeAdded") → full details 4. subtensor_search(query="stake") → find by keyword 5. subtensor_explain(topic="concept", name="staking") → understand domain TOOLS: - subtensor_search: Find items by keyword across all types - subtensor_lookup: Get details on a pallet, event, call, storage, constant, error, or type - subtensor_list: Browse pallets, events, calls, storage, constants, errors, types, runtime APIs, mechanisms, workflows - subtensor_explore: Relationships, changelogs, removed items, migration guides, runtime versions - subtensor_explain: Concepts, workflows, mechanisms, runtime APIs/errors, extrinsic format, code examples - subtensor_preferences: Get/set session language, node URL, node type - subtensor_decode: Decode SCALE hex into labelled fields (RAO→TAO, hex→SS58) UNITS: Balances in RAO (1 TAO = 10^9 RAO). Accounts as SS58 prefix 42. KEY PALLETS: SubtensorModule (staking/neurons/subnets), Balances (TAO transfers), System (runtime info). Free reference API. No auth required. Powered by subtensor.com (bittensor.ai).

Tools

7 advertised

subtensor_search — Search Subtensor
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search across all Subtensor pallets, events, calls, storage, constants, and errors by keyword.

subtensor_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "type": {
      "enum": [
        "all",
        "event",
        "call",
        "storage",
        "constant",
        "error",
        "type",
        "runtime-api",
        "mechanism",
        "workflow",
        "hyperparameter",
        "learn",
        "glossary",
        "runtime-error"
      ],
      "type": "string",
      "description": "Filter by item type (default: all)"
    },
    "limit": {
      "type": "number",
      "description": "Max results per page (default: 10, max: 50)"
    },
    "query": {
      "type": "string",
      "description": "Search query (e.g., 'stake', 'neuron', 'emission')"
    },
    "cursor": {
      "type": "string",
      "description": "Pagination cursor from previous response"
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "status": {
      "enum": [
        "active",
        "removed",
        "all"
      ],
      "type": "string",
      "description": "Filter by item status (default: 'active')"
    }
  }
}
subtensor_search output schema
{
  "type": "object",
  "required": [
    "query",
    "status_filter",
    "total",
    "results"
  ],
  "properties": {
    "query": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "pallet",
          "name",
          "score"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "pallet": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "detail_url": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "nextCursor": {
      "type": "string"
    },
    "_removed_hint": {
      "type": "string"
    },
    "status_filter": {
      "type": "string"
    },
    "removed_hidden": {
      "type": "number"
    }
  },
  "additionalProperties": true
}
subtensor_search annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
subtensor_lookup — Look up Subtensor item
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get detailed info about a specific pallet, event, call, storage item, constant, error, SCALE type, RPC method, protocol account, or EVM precompile. Accepts URN identifiers with optional #field.path drilling.

subtensor_lookup input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "sub": {
      "type": [
        "string",
        "number"
      ],
      "description": "For type=\"account\": derive a sub-account. A number is a netuid or crowdloan id; a string is an 8-byte tag such as \"beta/esc\". Index 0 collapses onto the base address."
    },
    "urn": {
      "type": "string",
      "description": "URN identifier (e.g., 'subtensor:event:SubtensorModule.StakeAdded', 'subtensor:storage:System.Account#data.free', 'subtensor:api:SwapRuntimeApi.sim_swap_tao_for_alpha', 'subtensor:account:SubtensorModule.SubtensorPalletId#64', 'subtensor:precompile:StakingV2'). `subtensor:runtime_api:...` is accepted as an alias for `subtensor:api:...`. Supports field-path drilling with # for event/call/storage/type items (for account items, #fragment is a sub-index instead). Alternative to type+pallet+name. Takes precedence if both provided."
    },
    "name": {
      "type": [
        "string",
        "number"
      ],
      "description": "Item name (e.g., 'SubtensorModule', 'StakeAdded', 'add_stake', 'AccountId32', 'pruning', 'pow-faucet') or type ID number. For type=\"account\": the declaring key ('SubtensorModule.SubtensorPalletId'). For type=\"precompile\": a name ('StakingV2') or 0x address."
    },
    "type": {
      "enum": [
        "pallet",
        "event",
        "call",
        "storage",
        "constant",
        "error",
        "type",
        "runtime_api",
        "rpc_method",
        "account",
        "precompile",
        "cli_flag",
        "build_feature"
      ],
      "type": "string",
      "description": "What kind of item to look up"
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "pallet": {
      "type": "string",
      "description": "Pallet name — required for event/call/storage/constant/error lookups (e.g., 'SubtensorModule')"
    },
    "address": {
      "type": "string",
      "description": "For type=\"account\": an SS58 address to identify. Returns which protocol account it is, including the sub-index, or reports that it is an ordinary wallet."
    },
    "include": {
      "enum": [
        "events",
        "calls",
        "storage",
        "constants",
        "errors"
      ],
      "type": "string",
      "description": "For pallet lookup: filter to a specific item type with descriptions"
    },
    "language": {
      "enum": [
        "typescript",
        "python-bt",
        "python-sub",
        "rust"
      ],
      "type": "string",
      "description": "Field name casing for your language. TypeScript shows camelCase (tickLow), others show snake_case (tick_low). Overrides session preference."
    },
    "preferences": {
      "type": "string",
      "description": "Preferences handle from subtensor_preferences(action=\"set\"). Carries language/node_url/node_type without a session. Explicit arguments on this call take precedence over the handle."
    },
    "include_history": {
      "type": "boolean",
      "description": "Include full argument signatures for each version range (events/calls only)"
    },
    "include_removed": {
      "type": "boolean",
      "description": "Include removed/historical items (default: false)"
    }
  }
}
subtensor_lookup output schema
{
  "type": "object",
  "required": [
    "type",
    "name"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "type": {
      "type": "string",
      "description": "Item kind, mirrors the request type"
    },
    "pallet": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
subtensor_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
subtensor_list — List Subtensor items
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse items by category: pallets, events, calls, storage, constants, errors, types, runtime APIs, RPC methods, protocol accounts, EVM precompiles, mechanisms, workflows, hyperparameters, cli_flags, build_features, chain_specs, or env_vars.

subtensor_list input schema
{
  "type": "object",
  "required": [
    "category"
  ],
  "properties": {
    "kind": {
      "enum": [
        "primitive",
        "composite",
        "variant",
        "sequence",
        "array",
        "tuple",
        "compact"
      ],
      "type": "string",
      "description": "For types: filter by type kind"
    },
    "role": {
      "enum": [
        "hotkey",
        "coldkey",
        "coldkey:owner",
        "coldkey:subnet-owner",
        "root",
        "senate",
        "any"
      ],
      "type": "string",
      "description": "Filter calls by required role (only applies when category=calls)"
    },
    "limit": {
      "type": "number",
      "description": "Max items per page (default: 10)"
    },
    "cursor": {
      "type": "string",
      "description": "Pagination cursor from previous response"
    },
    "domain": {
      "enum": [
        "consensus",
        "emission",
        "staking",
        "registration",
        "subnet",
        "governance",
        "identity",
        "security",
        "swap",
        "data",
        "randomness"
      ],
      "type": "string",
      "description": "For mechanisms: filter by domain"
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "pallet": {
      "type": "string",
      "description": "Pallet name — required for events/calls/storage/constants/errors (e.g., 'SubtensorModule'). For category='rpc_methods' this filters by RPC namespace instead (e.g., 'state', 'subtensor')."
    },
    "search": {
      "type": "string",
      "description": "For types: search by name"
    },
    "context": {
      "enum": [
        "dev",
        "production",
        "both"
      ],
      "type": "string",
      "description": "For cli_flags/build_features: filter by usage context"
    },
    "category": {
      "enum": [
        "pallets",
        "events",
        "calls",
        "storage",
        "constants",
        "errors",
        "types",
        "runtime_apis",
        "rpc_methods",
        "accounts",
        "precompiles",
        "mechanisms",
        "workflows",
        "hyperparameters",
        "cli_flags",
        "build_features",
        "chain_specs",
        "env_vars"
      ],
      "type": "string",
      "description": "Category of items to list"
    },
    "flag_category": {
      "type": "string",
      "description": "For cli_flags: filter by flag category (chain, sync, networking, rpc, metrics, runtime, subtensor)"
    },
    "include_removed": {
      "type": "boolean",
      "description": "Include removed/historical items (default: false)"
    }
  }
}
subtensor_list output schema
{
  "type": "object",
  "anyOf": [
    {
      "type": "object",
      "required": [
        "category",
        "pallets"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "pallets": {
          "type": "array"
        },
        "category": {
          "const": "pallets"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "events"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "events": {
          "type": "array"
        },
        "category": {
          "const": "events"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "calls"
      ],
      "properties": {
        "calls": {
          "type": "array"
        },
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "calls"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "storage"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "storage": {
          "type": "array"
        },
        "category": {
          "const": "storage"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "constants"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "constants"
        },
        "constants": {
          "type": "array"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "errors"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "errors": {
          "type": "array"
        },
        "category": {
          "const": "errors"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "types"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "types": {
          "type": "array"
        },
        "category": {
          "const": "types"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "apis"
      ],
      "properties": {
        "apis": {
          "type": "array"
        },
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "runtime_apis"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "methods"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "methods": {
          "type": "array"
        },
        "category": {
          "const": "rpc_methods"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "accounts"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "accounts": {
          "type": "array"
        },
        "category": {
          "const": "accounts"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "precompiles"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "precompiles"
        },
        "nextCursor": {
          "type": "string"
        },
        "precompiles": {
          "type": "array"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "mechanisms"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "mechanisms"
        },
        "mechanisms": {
          "type": "array"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "categories"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "workflows"
        },
        "categories": {
          "type": "object"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "hyperparameters"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "hyperparameters"
        },
        "nextCursor": {
          "type": "string"
        },
        "hyperparameters": {
          "type": "array"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "cli_flags"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "cli_flags"
        },
        "cli_flags": {
          "type": "array"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "build_features"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "build_features"
        },
        "nextCursor": {
          "type": "string"
        },
        "build_features": {
          "type": "array"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "chain_specs"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "chain_specs"
        },
        "nextCursor": {
          "type": "string"
        },
        "chain_specs": {
          "type": "array"
        }
      },
      "additionalProperties": true
    },
    {
      "type": "object",
      "required": [
        "category",
        "env_vars"
      ],
      "properties": {
        "count": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "category": {
          "const": "env_vars"
        },
        "env_vars": {
          "type": "array"
        },
        "nextCursor": {
          "type": "string"
        }
      },
      "additionalProperties": true
    }
  ],
  "required": [
    "category"
  ],
  "properties": {
    "category": {
      "type": "string",
      "description": "Item category, mirrors the request category"
    }
  },
  "description": "Shape varies by category: each branch pins the category to the array field it returns its items in."
}
subtensor_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
subtensor_explore — Explore relationships and changelogs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explore relationships, version history, removed items, changelogs, and migration guides between runtime versions.

subtensor_explore input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Item name (e.g., 'StakeAdded', 'add_stake', 'TotalStake')"
    },
    "type": {
      "enum": [
        "event",
        "call",
        "storage",
        "error",
        "all",
        "pallet",
        "constant"
      ],
      "type": "string",
      "description": "Item type — for relationships (event/call/storage/error), for removed (all/pallet/event/call/storage/constant/error)"
    },
    "limit": {
      "type": "number",
      "description": "Max items per page (default: 10)"
    },
    "topic": {
      "enum": [
        "relationships",
        "emitters",
        "modifiers",
        "throwers",
        "removed",
        "changelog",
        "migration",
        "versions"
      ],
      "type": "string",
      "description": "What to explore"
    },
    "cursor": {
      "type": "string",
      "description": "Pagination cursor from previous response"
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "pallet": {
      "type": "string",
      "description": "Pallet name (e.g., 'SubtensorModule')"
    },
    "version": {
      "type": "number",
      "description": "For versions: look up a specific version"
    },
    "to_version": {
      "type": "number",
      "description": "For changelog/migration: end version"
    },
    "from_version": {
      "type": "number",
      "description": "For changelog/migration: start version"
    }
  }
}
subtensor_explore output schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "topic": {
      "type": "string",
      "description": "Explore topic, mirrors the request topic"
    }
  },
  "additionalProperties": true
}
subtensor_explore annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
subtensor_explain — Explain Subtensor concepts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Understand Bittensor concepts, workflows, mechanisms, runtime APIs, runtime errors, extrinsic format, or get code examples.

subtensor_explain input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Topic-specific name: concept name ('staking'), workflow ID ('add-stake'), mechanism ID ('yuma-consensus'), runtime API name ('NeuronInfoRuntimeApi'), or item name for examples"
    },
    "topic": {
      "enum": [
        "concept",
        "workflow",
        "mechanism",
        "runtime_api",
        "runtime_errors",
        "extrinsic_format",
        "examples",
        "monitor",
        "event_group"
      ],
      "type": "string",
      "description": "What to explain"
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "pallet": {
      "type": "string",
      "description": "Pallet name — required for examples (e.g., 'SubtensorModule')"
    },
    "language": {
      "enum": [
        "typescript",
        "python-bt",
        "python-sub",
        "rust"
      ],
      "type": "string",
      "description": "For examples: filter to one language (overrides session preference)"
    },
    "node_url": {
      "type": "string",
      "description": "For examples: WebSocket endpoint override"
    },
    "enum_slug": {
      "enum": [
        "dispatch",
        "token",
        "arithmetic",
        "transactional",
        "trie",
        "module"
      ],
      "type": "string",
      "description": "For runtime_errors: get a specific error enum"
    },
    "item_type": {
      "enum": [
        "storage",
        "call",
        "event"
      ],
      "type": "string",
      "description": "For examples: type of item to generate code for"
    },
    "node_type": {
      "enum": [
        "lite",
        "archive"
      ],
      "type": "string",
      "description": "For examples: 'lite' (current state) or 'archive' (historical patterns)"
    },
    "preferences": {
      "type": "string",
      "description": "Preferences handle from subtensor_preferences(action=\"set\"). Carries language/node_url/node_type without a session. Explicit arguments on this call take precedence over the handle."
    }
  }
}
subtensor_explain output schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "topic"
      ],
      "properties": {
        "topic": {
          "type": "string",
          "description": "Explain topic, mirrors the request topic"
        }
      }
    },
    {
      "required": [
        "type",
        "name"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "description": "Item kind — 'runtime_api', shared shape with subtensor_lookup"
        }
      }
    }
  ],
  "additionalProperties": true
}
subtensor_explain annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
subtensor_preferences — Session preferences
Advertised by the server during the last successful anonymous check.

Get or set session preferences for language, node URL, and node type. Language affects field name casing (TypeScript=camelCase, others=snake_case) and code examples.

subtensor_preferences input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "action": {
      "enum": [
        "get",
        "set"
      ],
      "type": "string",
      "description": "Action to perform (default: 'get')"
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "language": {
      "enum": [
        "typescript",
        "python-bt",
        "python-sub",
        "rust"
      ],
      "type": "string",
      "description": "For set: preferred language. Affects field name casing in lookups (TypeScript=camelCase, others=snake_case) and code examples."
    },
    "node_url": {
      "type": "string",
      "description": "For set: WebSocket endpoint for generated code"
    },
    "node_type": {
      "enum": [
        "lite",
        "archive"
      ],
      "type": "string",
      "description": "For set: 'lite' (current state) or 'archive' (historical patterns)"
    },
    "preferences": {
      "type": "string",
      "description": "Preferences handle from subtensor_preferences(action=\"set\"). Carries language/node_url/node_type without a session. Explicit arguments on this call take precedence over the handle."
    }
  }
}
subtensor_preferences output schema
{
  "type": "object",
  "required": [
    "node_type",
    "preferences_handle"
  ],
  "properties": {
    "language": {
      "type": [
        "string",
        "null"
      ]
    },
    "node_url": {
      "type": [
        "string",
        "null"
      ]
    },
    "node_type": {
      "type": "string"
    },
    "preferences_handle": {
      "type": "string",
      "description": "Pass back as `preferences` on later calls to reapply these."
    }
  },
  "additionalProperties": true
}
subtensor_preferences annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
subtensor_decode — Decode SCALE data
Advertised by the server during the last successful anonymous check.
Advertised read-only

Decode SCALE-encoded hex into labelled fields with RAO→TAO and hex→SS58 conversions applied. Omit pallet and name to identify an event or call from its two-byte (pallet index, item index) prefix — the usual case when you have bytes and want to know what they are.

subtensor_decode input schema
{
  "type": "object",
  "required": [
    "hex"
  ],
  "properties": {
    "hex": {
      "type": "string",
      "description": "SCALE-encoded bytes as hex, with or without a 0x prefix. Whitespace is ignored."
    },
    "kind": {
      "enum": [
        "event",
        "call",
        "value"
      ],
      "type": "string",
      "description": "What the bytes are: 'event' (default), 'call', or 'value' for a bare value of a given type"
    },
    "name": {
      "type": "string",
      "description": "Event or call name. Must be given together with \"pallet\"."
    },
    "type": {
      "type": "string",
      "description": "For kind=\"value\": the SCALE type to decode against, e.g. \"u64\", \"AccountId\", \"Vec<u16>\", \"Option<u32>\""
    },
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "description": "Response format: 'text' (compact, default) or 'json' (structured)"
    },
    "pallet": {
      "type": "string",
      "description": "Pallet of the event or call. Omit together with \"name\" to identify the item from the byte prefix instead."
    }
  }
}
subtensor_decode output schema
{
  "type": "object",
  "required": [
    "kind",
    "input",
    "fields",
    "trailing_bytes"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "input": {
      "type": "string"
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "raw"
        ],
        "properties": {
          "raw": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "error": {
            "type": "string"
          },
          "value": {},
          "display": {
            "type": "string"
          },
          "conversion": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "trailing_bytes": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
subtensor_decode annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

11 advertised

explain-pallet — Explain a pallet

Advertised by the server during the last successful anonymous check.

Walk through a pallet: purpose, key events/calls/storage, and a typical workflow

pallet
Pallet name (e.g., SubtensorModule) (required)
explain-workflow — Walk through a workflow

Advertised by the server during the last successful anonymous check.

Step-by-step walkthrough of a named workflow with live-state verification links

workflow
Workflow id (e.g., add-stake, register-neuron-burned, set-weights, register-network, become-delegate) (required)
decode-event — Decode an event

Advertised by the server during the last successful anonymous check.

Decode a SCALE-encoded event payload or an on-chain event by id

hex_data
SCALE-encoded hex bytes
event_id
Explorer event id, format block-index
event_name
Optional hint: Pallet.EventName
build-extrinsic — Build an extrinsic

Advertised by the server during the last successful anonymous check.

Generate code to construct and submit a specific call, with verification link

call
Call identifier, format Pallet.callName (required)
language
Output language: typescript | python (required)
version-diff — Compare runtime versions

Advertised by the server during the last successful anonymous check.

Summarize all changes between two runtime versions, grouped by pallet

from_version
Lower runtime version number (required)
to_version
Upper runtime version number, or "current" for latest (required)
migration-help — Migrate from a removed item

Advertised by the server during the last successful anonymous check.

Find a replacement for a removed pallet item and produce migration code

removed_item
Format: Pallet.itemName (required)
getting-started — Get started

Advertised by the server during the last successful anonymous check.

Tailored introduction to Subtensor depending on audience

audience
Audience: developer | user | agent (required)
inspect-tx — Inspect a transaction

Advertised by the server during the last successful anonymous check.

Decode a transaction by hash, identify call and events, link to explorer

tx_hash
Transaction hash (hex with 0x prefix) (required)
inspect-account — Inspect an account

Advertised by the server during the last successful anonymous check.

Explore an SS58 account: detect role, link relevant explorer pages

address
SS58 address (Bittensor prefix 42) (required)
inspect-subnet — Inspect a subnet

Advertised by the server during the last successful anonymous check.

Subnet overview from docs + live state link

netuid
Subnet ID (non-negative integer) (required)
inspect-block — Inspect a block

Advertised by the server during the last successful anonymous check.

Walk through the extrinsics and events at a block height

block_number
Block height (non-negative integer) (required)

Resources

20 advertised

item-explorer — Subtensor item explorer

Advertised by the server during the last successful anonymous check.

Interactive card for a pallet, event, call, storage item, constant or error, with clickable cross-references to related items.

item-explorer URI
ui://subtensor/item-explorer.html

MIME type: text/html;profile=mcp-app

scale-decoder — SCALE decoder

Advertised by the server during the last successful anonymous check.

Paste SCALE-encoded event or extrinsic hex and see it decoded field by field, with RAO→TAO and hex→SS58 conversions applied.

scale-decoder URI
ui://subtensor/scale-decoder.html

MIME type: text/html;profile=mcp-app

pallet-SubtensorModule — SubtensorModule pallet

Advertised by the server during the last successful anonymous check.

Core staking/neurons/subnets/emissions pallet

pallet-SubtensorModule URI
subtensor://pallet/SubtensorModule

MIME type: text/markdown

pallet-Balances — Balances pallet

Advertised by the server during the last successful anonymous check.

TAO balance transfers and account operations

pallet-Balances URI
subtensor://pallet/Balances

MIME type: text/markdown

pallet-System — System pallet

Advertised by the server during the last successful anonymous check.

Substrate runtime info: block number, account nonce, events

pallet-System URI
subtensor://pallet/System

MIME type: text/markdown

pallet-AdminUtils — AdminUtils pallet

Advertised by the server during the last successful anonymous check.

Subnet admin operations and hyperparameter updates

pallet-AdminUtils URI
subtensor://pallet/AdminUtils

MIME type: text/markdown

pallet-Commitments — Commitments pallet

Advertised by the server during the last successful anonymous check.

On-chain commit-reveal data

pallet-Commitments URI
subtensor://pallet/Commitments

MIME type: text/markdown

pallet-Drand — Drand pallet

Advertised by the server during the last successful anonymous check.

Drand randomness beacon integration

pallet-Drand URI
subtensor://pallet/Drand

MIME type: text/markdown

pallet-EVMChainId — EVMChainId pallet

Advertised by the server during the last successful anonymous check.

EVM chain ID configuration

pallet-EVMChainId URI
subtensor://pallet/EVMChainId

MIME type: text/markdown

pallet-Proxy — Proxy pallet

Advertised by the server during the last successful anonymous check.

Proxy accounts and delegation of authority

pallet-Proxy URI
subtensor://pallet/Proxy

MIME type: text/markdown

pallet-Utility — Utility pallet

Advertised by the server during the last successful anonymous check.

Batch calls and dispatch utilities

pallet-Utility URI
subtensor://pallet/Utility

MIME type: text/markdown

pallet-SafeMode — SafeMode pallet

Advertised by the server during the last successful anonymous check.

Network-wide safe-mode pause

pallet-SafeMode URI
subtensor://pallet/SafeMode

MIME type: text/markdown

runtime-current — Current runtime

Advertised by the server during the last successful anonymous check.

Notes for the latest deployed runtime version

runtime-current URI
subtensor://runtime/current

MIME type: text/markdown

workflow-add-stake — Workflow: add-stake

Advertised by the server during the last successful anonymous check.

Add stake from coldkey to hotkey

workflow-add-stake URI
subtensor://workflow/add-stake

MIME type: text/markdown

workflow-register-neuron-burned — Workflow: register-neuron-burned

Advertised by the server during the last successful anonymous check.

Register a neuron by burning TAO

workflow-register-neuron-burned URI
subtensor://workflow/register-neuron-burned

MIME type: text/markdown

workflow-set-weights — Workflow: set-weights

Advertised by the server during the last successful anonymous check.

Set validator weights for subnet UIDs

workflow-set-weights URI
subtensor://workflow/set-weights

MIME type: text/markdown

workflow-register-network — Workflow: register-network

Advertised by the server during the last successful anonymous check.

Create (register) a new subnet

workflow-register-network URI
subtensor://workflow/register-network

MIME type: text/markdown

workflow-become-delegate — Workflow: become-delegate

Advertised by the server during the last successful anonymous check.

Register a hotkey as a delegate

workflow-become-delegate URI
subtensor://workflow/become-delegate

MIME type: text/markdown

concept-dtao — Concept: dtao

Advertised by the server during the last successful anonymous check.

Dynamic TAO: subnet alpha tokens

concept-dtao URI
subtensor://concept/dtao

MIME type: text/markdown

concept-emissions — Concept: emissions

Advertised by the server during the last successful anonymous check.

How emissions are calculated and distributed

concept-emissions URI
subtensor://concept/emissions

MIME type: text/markdown

pallet — Pallet documentation

Advertised by the server during the last successful anonymous check.

Full pallet reference: events, calls, storage, constants, errors

pallet URI template
subtensor://pallet/{name}

MIME type: text/markdown

event — Event reference

Advertised by the server during the last successful anonymous check.

Event details: fields, triggers, related calls and storage

event URI template
subtensor://event/{pallet}/{name}

MIME type: text/markdown

call — Call reference

Advertised by the server during the last successful anonymous check.

Call (extrinsic) details: parameters, events emitted, errors

call URI template
subtensor://call/{pallet}/{name}

MIME type: text/markdown

storage — Storage reference

Advertised by the server during the last successful anonymous check.

Storage item: keys, value, modifying calls

storage URI template
subtensor://storage/{pallet}/{name}

MIME type: text/markdown

constant — Constant reference

Advertised by the server during the last successful anonymous check.

Pallet constant: value, type, when it changed

constant URI template
subtensor://constant/{pallet}/{name}

MIME type: text/markdown

error — Error reference

Advertised by the server during the last successful anonymous check.

Error type: what throws it, how to avoid

error URI template
subtensor://error/{pallet}/{name}

MIME type: text/markdown

runtime — Runtime version notes

Advertised by the server during the last successful anonymous check.

Per-version changes across all pallets. Pass "current" for latest.

runtime URI template
subtensor://runtime/{version}

MIME type: text/markdown

workflow — Workflow walkthrough

Advertised by the server during the last successful anonymous check.

Step-by-step workflow (e.g., add-stake, set-weights)

workflow URI template
subtensor://workflow/{name}

MIME type: text/markdown

concept — Concept explanation

Advertised by the server during the last successful anonymous check.

Bittensor concept (e.g., dtao, emissions, consensus)

concept URI template
subtensor://concept/{name}

MIME type: text/markdown

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1286 ms
95th percentile latency
1286 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1286 ms · metadata changed · 7 tool(s), 20 resource(s), 9 resource template(s), 11 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http subtensor-mcp https://subtensor.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add subtensor-mcp --url https://subtensor.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable subtensor-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "subtensor-mcp": {
      "url": "https://subtensor.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "subtensor-mcp": {
      "type": "streamableHttp",
      "url": "https://subtensor.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start subtensor-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "subtensor-mcp": {
      "type": "http",
      "url": "https://subtensor.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http subtensor-mcp https://subtensor.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "subtensor-mcp": {
      "url": "https://subtensor.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "subtensor-mcp": {
      "serverUrl": "https://subtensor.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Subtensor MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Subtensor MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing