
โ labsco summary โ our analysis, not the vendor's
What it is โ a "Code Mode" MCP server giving LLMs full access to the Audius music platform and Open Audio Protocol via two meta-tools instead of 100+ individual ones.
What you get โ
searchto discover API endpoints andexecuteto run JavaScript against the Audius API in a QuickJS WASM sandbox โ e.g. "what's trending on Audius right now?"playto open a track in the Audius app/browsersubgraphto query on-chain protocol data (staking, governance, nodes) via The Graph- Compresses the whole API into ~1,000 tokens of context
Requirements โ an AUDIUS_API_KEY (free developer app at audius.co/settings); optional GRAPH_API_KEY for the subgraph tool.
Cost snapshot โ free and open source (license not stated in the excerpt); the Audius API is free with a developer key.
Setup effort โ clone, pnpm install, add your key to .env, run pnpm dev; connect via HTTP or a node dist/index.js entry.
Our take โ Clever architecture for avoiding tool explosion. Caveat: the subgraph tool errors without a separate Graph API key, and write operations (uploads/favorites) need an additional API secret.
Source: the project README โ summarized 2026-07-08.
โ readme from github โ mirrored (latest on GitHub โ)
Audius MCP Server (Code Mode)
A Code Mode MCP server that gives LLMs full access to the Audius music platform and Open Audio Protocol. Instead of 100+ individual tools, it uses two meta-tools โ search and execute โ to compress the entire Audius API into ~1,000 tokens of context.
Built with Effect-TS. Runs a QuickJS WASM sandbox for secure code execution.
How It Works
LLM โโโบ search("trending tracks") โ discovers GET /tracks/trending
โโโบ execute("audius.request(...)") โ runs code in sandbox, returns resultsThe LLM writes JavaScript that runs in an isolated sandbox with an authenticated audius.request() client. No API keys in the prompt, no tool explosion, no round-trip overhead.
Tools
| Tool | What it does |
|---|---|
| search | Discover API endpoints by tag, path, method, or keyword |
| execute | Run JavaScript against the Audius API in a QuickJS sandbox |
| play | Open a track in the Audius desktop app or browser |
| subgraph | Query on-chain protocol data (staking, governance, nodes) via The Graph |
Getting API Keys
Audius API Key (required)
- Go to audius.co/settings and sign in (or create an account)
- Scroll to Developer Apps and create a new app
- Copy the API Key โ this goes in your
.envasAUDIUS_API_KEY - Optionally copy the API Secret if you plan to do write operations (uploads, favorites)
Alternatively, get credentials at api.audius.co/plans.
The Graph API Key (optional, for subgraph tool)
The subgraph tool queries on-chain protocol data (staking, governance, nodes). It requires a Graph API key:
- Go to thegraph.com/studio and sign in
- Create an API key (video tutorial)
- Add it to your
.envasGRAPH_API_KEY
Without this key, the subgraph tool will return an auth error. All other tools work fine without it.
Connect to Claude
Claude Code
Add to your project's .mcp.json:
{
"mcpServers": {
"audius-mcp": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}Claude Desktop
Add to claude_mcp_config.json:
{
"mcpServers": {
"audius": {
"command": "node",
"args": ["/path/to/audius-mcp-atris/dist/index.js"],
"env": {
"AUDIUS_API_KEY": "your_key_here"
}
}
}
}Example Conversations
"What's trending on Audius right now?"
// LLM calls search({ tag: "tracks" }), then:
return await audius.request('GET', '/tracks/trending', { query: { limit: 5 } })"Find deadmau5 and show me his top tracks"
const users = await audius.request('GET', '/users/search', { query: { query: 'deadmau5' } })
const userId = users.data[0].id
const tracks = await audius.request('GET', '/users/' + userId + '/tracks', { query: { sort: 'plays' } })
return tracks.data.map(t => ({ title: t.title, plays: t.play_count }))"How much $AUDIO is staked in the protocol?"
{ audiusNetworks(first: 1) { totalTokensStaked totalTokensDelegated totalSupply } }Architecture
src/
โโโ index.ts # Entry point โ Effect layers, HTTP server
โโโ AppConfig.ts # Env var config (AUDIUS_API_KEY, PORT)
โโโ mcp/
โ โโโ McpSchema.ts # MCP 2025-11-25 protocol (Effect Schema)
โ โโโ McpSerialization.ts # JSON-RPC โ Effect RPC bridge
โ โโโ McpServer.ts # Request dispatch (initialize, tools/*)
โ โโโ McpServerTransport.ts # Streamable HTTP on /mcp
โโโ api/
โ โโโ SpecLoader.ts # Fetch + resolve Audius swagger.yaml
โ โโโ SpecIndex.ts # Searchable index over parsed spec
โ โโโ AudiusClient.ts # Authenticated HTTP client
โโโ tools/
โ โโโ SearchTool.ts # search tool
โ โโโ ExecuteTool.ts # execute tool
โ โโโ PlayTool.ts # play tool
โ โโโ SubgraphTool.ts # subgraph tool
โโโ sandbox/
โโโ Sandbox.ts # QuickJS WASM sandbox
โโโ TypeGenerator.ts # TS declarations from specEvery component is an Effect service (Context.Tag) composed via Layer. The sandbox uses QuickJSDeferredPromise to support unlimited chained await calls.
Environment Variables
| Variable | Required | Description |
|---|---|---|
AUDIUS_API_KEY | Yes | API key from audius.co/settings |
PORT | No | HTTP server port (default: 3000) |
GRAPH_API_KEY | No | The Graph API key for subgraph queries |
Development
pnpm build # Compile TypeScript
pnpm start # Run compiled server
pnpm dev # Build + run
pnpm test # Run testsSecurity
- Sandbox isolation: LLM-generated code runs in QuickJS WASM โ no filesystem, no network, no env vars
- No raw fetch: Only
audius.request()is available, hardcoded toapi.audius.co - SSRF protection: API paths must start with
/and cannot contain@ - Memory cap: 64MB per execution
- Timeout: 30s default, configurable per call
- Fresh context: No state leaks between executions
Protocol
- MCP version: 2025-11-25
- Transport: Streamable HTTP at
POST /mcp - Sessions:
MCP-Session-Idheader, in-memory (stateless-ready)
Open Audio Protocol
This server is built on the Open Audio Protocol โ the decentralized global music database. Audius is one application layer on top of OAP. The subgraph tool provides direct access to on-chain protocol data.
{
"mcpServers": {
"audius-mcp": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}Before it works, you'll need: AUDIUS_API_KEY
Quick Start
# Install
git clone https://github.com/glassBead-tc/audius-mcp-atris.git
cd audius-mcp-atris
pnpm install
# Configure
echo 'AUDIUS_API_KEY=your_key_here' > .env
# Build & run
pnpm devNo common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
License
MIT