Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Play three.ws Coin Clash — read the faction battle board and leaderboard, enlist, and rally.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
THREE_WS_BASE, THREE_WS_TIMEOUT_MS, SOLANA_SECRET_KEYValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"clash": {
"command": "npx",
"args": [
"-y",
"@three-ws/clash-mcp"
],
"env": {
"THREE_WS_BASE": "your-value",
"THREE_WS_TIMEOUT_MS": "your-value",
"SOLANA_SECRET_KEY": "your-value"
}
}
}
}Run this in your terminal
claude mcp add clash --env THREE_WS_BASE=your-value --env THREE_WS_TIMEOUT_MS=your-value --env SOLANA_SECRET_KEY=your-value -- npx -y @three-ws/clash-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"clash": {
"command": "npx",
"args": [
"-y",
"@three-ws/clash-mcp"
],
"env": {
"THREE_WS_BASE": "your-value",
"THREE_WS_TIMEOUT_MS": "your-value",
"SOLANA_SECRET_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"clash": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@three-ws/clash-mcp"
],
"env": {
"THREE_WS_BASE": "your-value",
"THREE_WS_TIMEOUT_MS": "your-value",
"SOLANA_SECRET_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
THREE_WS_BASE envTHREE_WS_TIMEOUT_MS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account nirholas, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: SOLANA_SECRET_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.3) reached the registry 27 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Tools MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Web production tools for AI agents: contrast, JP text, WebP, JSON-LD, slugs, dates and 40+ more
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
@three-ws/clash-mcp
Play three.ws Coin Clash — the community faction war backed by real holdings + pump.fun data — from any AI agent. Read the live battle board, enlist your wallet, and rally power for a faction.
A Model Context Protocol server that puts Coin Clash — three.ws's community faction war — in reach of any AI agent over stdio. Every community is a faction, its holders are its army; two factions are matched each round, and whichever army rallies more power before the clock runs out wins. Read the live board and leaderboard, then enlist (prove you hold the coin) and rally for your side.
Reads are public — point THREE_WS_BASE at a deployment and go. Writes are wallet-scoped: enlisting signs a challenge with your Solana key and the backend confirms a live on-chain holding of the faction coin before issuing a war pass. Factions, members, and momentum come from CoinCommunities + pump.fun; rally power is persisted and ranked server-side. Nothing is mocked.
npm install @three-ws/clash-mcp
Or run with npx (no install):
npx @three-ws/clash-mcp
Claude Code, one line:
claude mcp add clash -- npx -y @three-ws/clash-mcp
Claude Desktop / Cursor (claude_desktop_config.json or mcp.json):
{
"mcpServers": { "clash": { "command": "npx", "args": ["-y", "@three-ws/clash-mcp"], "env": { "SOLANA_SECRET_KEY": " " } } } }
Inspect the surface with the MCP Inspector:
npx -y @modelcontextprotocol/inspector npx @three-ws/clash-mcp
| Tool | Type | What it does |
|---|---|---|
get_clash_state | read-only | The live battle board: matchups, each army's power + momentum, the round clock, the tug-of-war share, who's leading. |
get_clash_leaderboard | read-only | All-time faction war records (W/L/D, win rate, power), optionally a single faction's top soldiers this round. |
enlist_faction | write | Prove the signer's wallet holds a faction coin (Solana-signed) and get a war pass. |
rally_faction | write | Spend taps as battle power for your faction — pass a war pass, or a token to auto-enlist and rally in one call. |
The reads return live data — power and standings move between calls, so neither is idempotent. The writes are wallet-scoped: no funds ever move (a war pass is a signed proof, not a transaction), so neither is destructive. enlist_faction is idempotent (re-enlisting mints an equivalent pass); rally_faction is not (each call appends power).
`get_clash_state` — none.
`get_clash_leaderboard` — faction (optional mint; also returns that faction's top soldiers this round).
`enlist_faction` — token (required faction mint), secret (optional base58 Solana secret; falls back to SOLANA_SECRET_KEY).
`rally_faction` — taps (required, 1–50), and either pass (a war pass from enlist_faction) or token (+ optional secret) to auto-enlist first.
get_clash_state shows the current round: who's matched, each army's power, momentum, and msLeft.enlist_faction issues a challenge bound to your wallet + faction, signs it with your Solana key, and the backend verifies the signature and a live on-chain holding of the coin. You get back a warPass. (No holding → eligible:false, reason:"not_a_holder".)rally_faction spends taps (1–50 per call) from the pass as battle power — multiplied by the faction's live momentum, capped per wallet per round. Call it repeatedly while msLeft > 0.get_clash_leaderboard).// get_clash_state
{}
{ "ok": true, "epoch": 486231, "epochMs": 3600000, "endsAt": 1750000000000, "msLeft": 1843000, "factionCount": 16, "arena": [ { "id": "486231:…", // each side also carries image, posts, and priceUsd (elided here) "a": { "token": "…", "symbol": "ALPHA", "members": 8200, "momentum": 1.31, "power": 940, "record": { "w": 12, "l": 4, "d": 1, "battles": 17, "power": 8100 } }, "b": { "token": "…", "symbol": "BETA", "members": 5100, "momentum": 1.12, "power": 610, "record": { "w": 7, "l": 9, "d": 0, "battles": 16, "power": 5400 } }, "aShare": 0.61, "leader": "…ALPHA mint…" } ], "bye": null }
// rally_faction — auto-enlist + rally in one call (wallet must hold the coin)
{ "token": "…faction mint…", "taps": 50 }
{ "ok": true, "enlisted": { "wallet": "…", "amount": 1250000, "usd": 84.20 }, "epoch": 486231, "mint": "…faction mint…", "added": 66, "momentum": 1.31, "walletPower": 66, "walletCap": 5000, "capped": false, "factionPower": 1005, "msLeft": 1841000 }
https://three.ws (or your own THREE_WS_BASE).SOLANA_SECRET_KEY or the per-call secret arg.| Variable | Required | Default | Notes |
|---|---|---|---|
THREE_WS_BASE | no | https://three.ws | API deployment to talk to. |
THREE_WS_TIMEOUT_MS | no | 20000 | Per-request timeout. |
SOLANA_SECRET_KEY | writes only | — | Base58 secret of the enlisting wallet. Per-call secret overrides it. Treat like cash. |
CLASH_SOLANA_SECRET | no | — | Fallback signer read when SOLANA_SECRET_KEY is unset, for hosts that scope env vars per server. Same format and the same care. |
The
secretis only ever used to sign the enlist challenge locally — a detached ed25519 signature over the challenge text. It never signs a transaction and no funds move. Still, it controls a wallet: prefer a per-callsecretor a dedicated env on a machine you trust.
A failed tool call returns an MCP error result (isError: true) whose text is a single JSON object: { "ok": false, "error": " ", "message": "…" }, plus status on upstream rejections and detail where the failure carries context (e.g. which wallet was not a holder):
error | Meaning | Recovery |
|---|---|---|
validation_error | Bad arguments: a missing faction token, or rally_faction called with neither a pass nor a token. | Fix the call. |
no_signer / invalid_secret | A write tool had no Solana key, or the key was not a base58 64-byte secret. | Pass secret or set SOLANA_SECRET_KEY. |
not_eligible | The auto-enlisting wallet does not hold the faction coin, so no pass was issued. detail carries wallet, faction, and reason. | Hold the coin, then retry. |
upstream_error | The API rejected the request. status carries the HTTP code; notable bodies include bad_challenge, bad_signature, pass_invalid (expired or foreign war pass), balance_unavailable (RPC could not read the holding), and cc_unconfigured (the deployment has no CoinCommunities config). | Act on the code; re-enlist on pass_invalid. |
timeout | No response within THREE_WS_TIMEOUT_MS. | Retry or raise the timeout. |
network_error | The request never reached the API (DNS, offline, TLS). | Check connectivity / THREE_WS_BASE. |
bad_config | THREE_WS_TIMEOUT_MS is not a positive number (thrown at startup). | Fix the env var. |
Part of the three.ws SDK suite — 3D AI agents, on-chain identity, and agent payments.
Website · Changelog · GitHub