Skip to main content
Glama

pump-fun-connector

An MCP server that lets Claude discover new pump.fun (Solana meme coin) tokens, risk-screen them with RugCheck + GMGN, check your on-chain position, and prepare or execute buy/sell transactions sized to your rules.

What this is (and isn't)

The default is non-custodial: prepare_buy and prepare_sell return unsigned transactions. Opt-in execute_buy and execute_sell can load a Solana CLI keypair file, sign locally, and broadcast after the same risk and spend checks. Use a dedicated wallet funded only with money you can afford to lose.

Automatic execution is disabled unless AUTO_TRADING_ENABLED=true.

Related MCP server: Pump.fun MCP Server

Layers

Layer

Tool(s)

What it does

Discovery

get_new_tokens, get_token_detail

Live pump.fun feed via PumpPortal's WebSocket data API

Risk scoring

get_risk_score

Composite RugCheck + GMGN score (0–100, higher = riskier)

Position

get_position

Reads your wallet's actual on-chain SPL token balances

Trade prep

prepare_buy, prepare_sell

Builds an unsigned PumpPortal transaction, enforces guardrails

Trade execution

execute_buy, execute_sell

Builds, signs, submits, and confirms a transaction when explicitly enabled

Market activity

get_market_activity

Buy/sell pressure, volume acceleration and liquidity depth from DexScreener (keyless)

Logging

create_investment_plan, log_transaction, log_creator_activity, log_creator_activity_batch, update_active_position, get_plans, close_plan

Plan/trade/creator records in two Google Sheets, joined by Plan ID

Position review

review_positions

Rebuilds full position context from the sheets, joined with live chain data

Connectivity

gdrive_status

Verifies Sheets access and reports the identity being used

Guardrails (enforced in code, not left to the model)

  • Per-trade size capprepare_buy refuses any usdAmount outside [MIN_TRADE_USD, MAX_TRADE_USD].

  • Daily/weekly spend cap — tracked in data/ledger.json against DAILY_SPEND_CAP_USD / WEEKLY_SPEND_CAP_USD. Note: this tracks prepared trades, since the server has no way to know which prepared transactions you actually went on to sign and broadcast. Treat the cap as a soft guard on intent, and get_position (reads the chain directly) as the source of truth on what actually happened.

  • Risk gateprepare_buy refuses to run unless get_risk_score was called for that mint within the last RISK_SCORE_FRESHNESS_MIN minutes and it cleared RISK_SCORE_THRESHOLD.

  • Wallet isolation — use a dedicated wallet funded only with your trading budget. The server loads the keypair only when an execution tool is called and verifies its public key matches WALLET_PUBLIC_KEY.

None of these thresholds are hardcoded opinions about what's "safe" — they're config in .env. Tune them, and periodically sanity-check get_risk_score's flags against a token yourself before trusting the threshold blindly.

Setup

npm install
npm run build
cp .env.example .env

Edit .env:

  • WALLET_PUBLIC_KEY — your Solana wallet's public address (not a private key/seed phrase).

  • WALLET_KEYPAIR_PATH — path to a wallet secret file, default keys. The file must be mode 600 or stricter and must match WALLET_PUBLIC_KEY. Accepted formats:

    1. Solana CLI JSON array (64 integers)

    2. Base58 secret key string

    3. Simple label format containing Private key: <base58-secret>

  • AUTO_TRADING_ENABLED — leave false for manual signing; set to true to enable automatic execution. Never enable this with a wallet holding unrelated funds.

  • SOLANA_RPC_URL — defaults to the public mainnet RPC; a dedicated RPC (Helius, QuickNode, etc.) will be faster and more reliable for get_position.

  • PUMPPORTAL_API_KEY — free key from pumpportal.fun, used only for the real-time data WebSocket (new-token/trade feeds). Not required for building trade transactions — that endpoint is keyless.

  • GMGN_API_KEY — optional second risk source. Leave blank to run on RugCheck-only scoring; the composite reweights to 100% RugCheck automatically and says so in its output. GMGN_API_BASE_URL defaults to https://openapi.gmgn.ai and rarely needs setting.

    To obtain a key: npm install -g gmgn-cli, then gmgn-cli config to generate an Ed25519 keypair, and upload the public key when creating the key in GMGN's dashboard. Derive the public half with openssl pkey -in ~/.config/gmgn/keypair.pem -pubout.

    Create the key with trading disabled. GMGN splits auth by route: trading endpoints require an Ed25519 signature over each request, while the market/token/portfolio reads this connector uses need only an X-APIKEY header plus timestamp and client_id query params. Nothing here routes trades through GMGN, so the private key is never loaded and trading permission would be standing privilege for no benefit. Leaving it off also avoids GMGN's 2FA requirement.

  • Trade sizing / spend caps / risk threshold — see comments in .env.example.

Register with Claude Desktop (or any MCP client)

{
  "mcpServers": {
    "pump-fun-connector": {
      "command": "node",
      "args": ["/absolute/path/to/pump-fun-connector/dist/index.js"],
      "env": {
        "WALLET_PUBLIC_KEY": "your-public-key-here",
        "SOLANA_RPC_URL": "https://api.mainnet-beta.solana.com",
        "PUMPPORTAL_API_KEY": "your-pumpportal-key",
        "MIN_TRADE_USD": "10",
        "MAX_TRADE_USD": "20",
        "DAILY_SPEND_CAP_USD": "100",
        "WEEKLY_SPEND_CAP_USD": "400",
        "RISK_SCORE_THRESHOLD": "50"
      }
    }
  }
}

Signing a prepared transaction

prepare_buy/prepare_sell return unsignedTransactionBase64. To sign and send it yourself:

import { Connection, VersionedTransaction, Keypair } from "@solana/web3.js";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const wallet = Keypair.fromSecretKey(/* load your key from wherever YOU keep it — never this server */);

const tx = VersionedTransaction.deserialize(Buffer.from(base64FromTool, "base64"));
tx.sign([wallet]);
const signature = await connection.sendTransaction(tx);
console.log(signature);

Wallets that support raw transaction signing (e.g. via a browser extension's signAndSendTransaction API, given the raw bytes) can also be wired up to consume this output directly.

Automatic execution

The execution tools use the same risk gate, trade-size limits, and daily/weekly buy caps as the prepare tools. They verify the fee payer, sign with the configured keypair, submit with preflight enabled, and wait for confirmed commitment.

To enable them locally, first restrict the key file:

chmod 600 keys

Then set WALLET_KEYPAIR_PATH=keys, WALLET_PUBLIC_KEY to the matching address, and AUTO_TRADING_ENABLED=true in .env. Start with very small limits and a disposable wallet.

Google Sheets logging layer

Two spreadsheets in Google Drive are the project's record of every decision and trade, joined by a shared Plan ID (PLAN-0001, ...).

  • Trade log — permanent history. Investment Plans (one row per decision, written before buying), Trade Log (one row per transaction), Summary (rollup).

  • Active positions — working file. Active Positions (one row per plan) and Creator Activity (append-only creator mentions).

All stored data is in English, including the Buy/Sell transaction types that the aggregate formulas filter on.

Setting up the sheets

Do not import the .xlsx templates through Drive. Drive's converter flattens a multi-tab workbook into a single sheet with headers only, dropping every formula — and it does so silently. Nothing errors afterwards; the connector writes rows whose totals simply never compute. The templates/*.xlsx files exist as a reference artifact, not as the setup path.

Instead:

  1. Create two empty Google Sheets in Drive — any folder, any filename.

  2. Share both with the service account email as Editor (untick "Notify people").

  3. Put their IDs in .env as GOOGLE_TRADE_LOG_SPREADSHEET_ID and GOOGLE_ACTIVE_POSITIONS_SPREADSHEET_ID.

  4. Provision the structure:

npm run provision:sheets              # writes tabs, headers, formulas, dropdowns
npm run provision:sheets -- --dry-run # preview without writing

The script is idempotent — safe to re-run after a schema change. It only writes headers and formula columns, so re-running never erases plans or transactions already recorded, and it refuses to delete a leftover Sheet1 that still holds data.

Locally, the script authenticates as you unless told otherwise, and a plain gcloud token lacks the Sheets scope. To run it as the service account without downloading a key file:

export GOOGLE_ACCESS_TOKEN=$(gcloud auth print-access-token \
  --impersonate-service-account=<SERVICE_ACCOUNT_EMAIL> \
  --scopes=https://www.googleapis.com/auth/spreadsheets)
npm run provision:sheets

(That needs roles/iam.serviceAccountTokenCreator on the service account.)

scripts/sheet-spec.mjs is the single source of truth for the structure, shared by the provisioner and the template generator so the two can't drift apart.

Where the files live in Drive, and what they're called, does not matter

The connector addresses spreadsheets by ID, never by path or filename. Put them in any folder, nested however you like, and name them whatever you want. All the connector needs is the ID from the URL:

https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit
                                       └──────── this is the ID ────────┘

Set those two IDs in .env and you're done. There is no folder path to configure, which is why there's no env variable for one.

What does have to match is the tab names inside each spreadsheetInvestment Plans, Trade Log, Active Positions, Creator Activity. Those are referenced directly in the range addresses the connector builds, so renaming a tab breaks it. (They're defined in src/sheets/schema.ts if you ever need to change them.) Column layout matters for the same reason — see the table below.

Controlled vocabulary

Stored values are English and, for the columns that formulas depend on, exact:

Field

Allowed values

Trade Log Type

Buy, Sellformulas filter on these literals

Lifecycle Phase

Launch, Trending, Plateau, Decline

Social Momentum

Growing, Stable, Declining

Tone

Positive, Neutral, Negative

Status (tracking)

ACTIVE, CLOSED

Status (computed, col S)

No Transactions, Open, Partially Closed, Closed

The Type column carries a dropdown constraint in the template, because a typo there doesn't error — it silently makes every total for that plan read zero.

Plans are marked CLOSED, never deleted

Closing a plan sets its status column to CLOSED — nothing is deleted or cleared. Two reasons: the evidence trail stays auditable, and rows never shift out from under the sheets' pre-filled formulas.

Sheet

Status column

Connector writes

Never write (formulas)

Investment Plans

— (col S Estado is formula-computed)

A–I

J–S

Trade Log

A–I

Active Positions

M (ACTIVE/CLOSED)

A–G, K–N

H, I, J

Creator Activity

L (ACTIVE/CLOSED)

A–L

Note the two different notions of "closed": column S in Investment Plans is formula-computed from the transaction rows (Open / Partially Closed / Closed) and reflects whether the position is financially closed. The ACTIVE/CLOSED columns are written by the connector and reflect whether you're still actively tracking the plan. close_plan refuses to mark a plan CLOSED unless column S already reads Closed, unless you pass force: true (e.g. after a rug where the tokens can't be sold at all).

Because nothing is deleted, these sheets fill up over time — Active Positions has room for 50 plans, Creator Activity for 499 rows. When full, copy the last formula row down to extend them; the connector will tell you when it runs out of space rather than overwriting anything.

Authorizing access to Google Drive

The connector authenticates as a service account — no interactive login, no refresh tokens to manage, and it works identically on Cloud Run and locally. You grant it access by simply sharing the two spreadsheets with the service account's email address, exactly as you'd share with a colleague.

1. Create a service account and enable the API

gcloud config set project YOUR_PROJECT_ID
gcloud services enable sheets.googleapis.com
gcloud iam service-accounts create pumpfun-connector \
  --display-name="Pump.fun MCP Connector"

Its email will be pumpfun-connector@YOUR_PROJECT_ID.iam.gserviceaccount.com.

2. Share both spreadsheets with that email

Open each spreadsheet in Google Drive → Share → paste the service account email → set to Editor → uncheck "Notify people" → Share.

This is the entire authorization step. No OAuth consent screen, no scopes to approve — the service account can only reach the two specific files you shared with it, nothing else in your Drive.

3. Point the connector at the spreadsheets

Copy each spreadsheet's ID from its URL:

https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^ this part

Set GOOGLE_TRADE_LOG_SPREADSHEET_ID and GOOGLE_ACTIVE_POSITIONS_SPREADSHEET_ID in .env.

4. Provide credentials

  • On Cloud Run — attach the service account to the service (below). Credentials resolve automatically from the metadata server; leave GOOGLE_APPLICATION_CREDENTIALS blank.

  • Locally — either download a key file and set GOOGLE_APPLICATION_CREDENTIALS to its path:

    gcloud iam service-accounts keys create ~/pumpfun-sa-key.json \
      --iam-account=pumpfun-connector@YOUR_PROJECT_ID.iam.gserviceaccount.com

    (treat that file like a password — it's covered by .gitignore), or use your own account with gcloud auth application-default login, in which case share the sheets with your email instead.

5. Verify

Call the gdrive_status tool. It prints the identity it's authenticating as and both spreadsheets' titles and tabs. If it reports 403, the sharing step didn't take — it will name the exact email to share with.

Logging tools

Tool

When

gdrive_status

First — verifies access and prints the service account email

create_investment_plan

Before any buy — writes the thesis to both sheets, returns the Plan ID

log_transaction

After each buy/sell leg settles — one row per leg

log_creator_activity

Daily while a plan is open — the evolving evidence trail

update_active_position

When lifecycle phase / momentum / review cadence changes

get_plans

To review track record before a new trade

close_plan

When a plan is fully exited — marks rows CLOSED

Transports

The connector speaks two transports from one shared tool registry (src/server.ts), so the tool surface can't drift between them:

Transport

Entry point

Use

stdio

dist/index.js

Local — Claude Code / Claude Desktop launching the process itself

Streamable HTTP

dist/http.js

Hosted — Claude custom connector pointing at a URL

Running the HTTP server locally

npm run build
MCP_AUTH_TOKEN=$(openssl rand -hex 32) npm run start:http

Endpoints:

Method

Path

Purpose

POST

/mcp

Initialize a session, then send requests with the mcp-session-id header

GET

/mcp

SSE stream for server→client messages

DELETE

/mcp

Terminate a session

GET

/health

Health check — the only unauthenticated route

The server refuses to start without MCP_AUTH_TOKEN. This is deliberate: the endpoint exposes tools that can move funds, so an unauthenticated public URL is a direct path to fund loss for anyone who finds it. The URL is not a secret. Override with MCP_ALLOW_UNAUTHENTICATED=true only on a genuinely private network.

Deployment guide

Start-to-finish: obtaining every value, deploying to Cloud Run, and connecting it to Claude.

Replace every <PLACEHOLDER> with your own values. Keep real project ids, service account emails, wallet addresses and URLs out of this repo — they belong in .env (gitignored) or Secret Manager.

Environment variable reference

Required — the server refuses to start without these:

Variable

Where it comes from

WALLET_PUBLIC_KEY

Your Solana wallet's public address. Step 1 below.

MCP_AUTH_TOKEN

You generate it. Step 5. Required only for the HTTP transport (dist/http.js).

Required for the logging layer (tools error with a clear message without them):

Variable

Where it comes from

GOOGLE_TRADE_LOG_SPREADSHEET_ID

The trade-log spreadsheet's URL. Step 3.

GOOGLE_ACTIVE_POSITIONS_SPREADSHEET_ID

The active-positions spreadsheet's URL. Step 3.

Required for the Claude connector UI:

Variable

Where it comes from

PUBLIC_URL

The deployed service URL. Advertised as the OAuth issuer, so it must match exactly what Claude connects to. Step 7.

Optional — sensible defaults, or features degrade cleanly:

Variable

Default

Notes

SOLANA_RPC_URL

public mainnet RPC

Rate-limits under load; a free Helius/QuickNode endpoint is more reliable

PUMPPORTAL_API_KEY

Only for the live token feed. Step 2.

GMGN_API_KEY

Second risk source. Without it, scoring is RugCheck-only and says so. Step 4.

GMGN_API_BASE_URL

https://openapi.gmgn.ai

Rarely needs changing

MIN_TRADE_USD / MAX_TRADE_USD

10 / 20

Per-trade size cap

DAILY_SPEND_CAP_USD / WEEKLY_SPEND_CAP_USD

100 / 400

Cumulative buy caps

RISK_SCORE_THRESHOLD

50

0–100, higher = riskier. Buys above this are refused.

RISK_SCORE_FRESHNESS_MIN

10

How recently get_risk_score must have run to gate a buy

RUGCHECK_WEIGHT / GMGN_WEIGHT

0.6 / 0.4

Composite blend; reweights automatically if a source is down

DEFAULT_SLIPPAGE_PCT

10

DEFAULT_PRIORITY_FEE_SOL

0.0005

DEFAULT_POOL

auto

AUTO_TRADING_ENABLED

false

true lets execute_buy/execute_sell sign and broadcast without review

WALLET_KEYPAIR_SECRET / WALLET_KEYPAIR_PATH

— / keys

Private key source; only read when auto-trading is enabled

GOOGLE_APPLICATION_CREDENTIALS

Local dev only. Leave blank on Cloud Run.

MCP_ALLOW_UNAUTHENTICATED

false

Disables the bearer requirement. Private networks only.

PORT

8080

Cloud Run sets this itself


Step 1 — Solana wallet

Use a dedicated wallet holding only your trading budget, never your main one.

Either take the public address from an existing wallet (Phantom, Solflare), or generate one:

node -e "
const { Keypair } = require('@solana/web3.js');
const fs = require('fs');
const kp = Keypair.generate();
fs.writeFileSync(process.env.HOME + '/.pump-fun-wallet.json', JSON.stringify(Array.from(kp.secretKey)), { mode: 0o600 });
console.log('PUBLIC KEY:', kp.publicKey.toBase58());
"

WALLET_PUBLIC_KEY is the printed address. The private key file is yours — never commit it, and never put it in this repo. Fund the wallet with only what you can afford to lose.

Step 2 — PumpPortal API key (optional)

Sign up at pumpportal.fun → "Create Wallet & API Key". Keep the API key; the Lightning wallet it also creates is unrelated to this connector.

Used only for the real-time token feed. Building trade transactions needs no key.

Step 3 — Google Sheets

  1. Create two empty Google Sheets in Drive — any folder, any filename.

  2. Copy each ID from its URL:

    https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit
                                           └────────── the ID ──────────┘
  3. Set GOOGLE_TRADE_LOG_SPREADSHEET_ID and GOOGLE_ACTIVE_POSITIONS_SPREADSHEET_ID.

  4. Share both with the service account from Step 6 (Editor, untick "Notify people").

  5. Provision the structure: npm run provision:sheets

Do not import the .xlsx templates through Drive — its converter silently flattens multi-tab workbooks into a single sheet with headers only, dropping every formula. See the Google Sheets section above.

Step 4 — GMGN API key (optional)

npm install -g gmgn-cli
gmgn-cli config                                              # generates the keypair
openssl pkey -in ~/.config/gmgn/keypair.pem -pubout          # the public half, for upload

In GMGN's dashboard, paste that public key, enable Reading, leave Trading off. The key it returns is GMGN_API_KEY.

Step 5 — Generate the connector auth token

openssl rand -hex 32

This is MCP_AUTH_TOKEN — what you'll type once in Claude's OAuth approval page.

Step 6 — Google Cloud setup

gcloud services enable run.googleapis.com sheets.googleapis.com \
  secretmanager.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com \
  --project=<GCP_PROJECT_ID>

gcloud iam service-accounts create <SA_NAME> \
  --display-name="Pump.fun MCP Connector" --project=<GCP_PROJECT_ID>

The service account email is <SA_NAME>@<GCP_PROJECT_ID>.iam.gserviceaccount.com — go back and share both spreadsheets with it (Step 3.4).

Store the secrets:

printf '%s' '<YOUR_MCP_AUTH_TOKEN>'  | gcloud secrets create mcp-auth-token --data-file=- --project=<GCP_PROJECT_ID>
printf '%s' '<YOUR_PUMPPORTAL_KEY>'  | gcloud secrets create pumpportal-key --data-file=- --project=<GCP_PROJECT_ID>
printf '%s' '<YOUR_GMGN_KEY>'        | gcloud secrets create gmgn-api-key   --data-file=- --project=<GCP_PROJECT_ID>

for s in mcp-auth-token pumpportal-key gmgn-api-key; do
  gcloud secrets add-iam-policy-binding "$s" \
    --member=serviceAccount:<SERVICE_ACCOUNT_EMAIL> \
    --role=roles/secretmanager.secretAccessor --project=<GCP_PROJECT_ID>
done

Use printf '%s', never echo. echo appends a newline, Secret Manager stores it as part of the value, and Cloud Run injects it into the env var — producing a token that compares unequal to the identical string you type, with no useful error. The code trims whitespace defensively, but clean secrets are better than relying on that.

Step 7 — Deploy

cd /path/to/pump-fun-connector    # --source . uploads the CURRENT directory
gcloud run deploy pumpfun-connector \
  --source . \
  --region <REGION> \
  --project <GCP_PROJECT_ID> \
  --service-account <SERVICE_ACCOUNT_EMAIL> \
  --set-env-vars "WALLET_PUBLIC_KEY=<WALLET_PUBLIC_KEY>,GOOGLE_TRADE_LOG_SPREADSHEET_ID=<ID>,GOOGLE_ACTIVE_POSITIONS_SPREADSHEET_ID=<ID>,MIN_TRADE_USD=10,MAX_TRADE_USD=20,DAILY_SPEND_CAP_USD=100,WEEKLY_SPEND_CAP_USD=400,RISK_SCORE_THRESHOLD=50" \
  --set-secrets "MCP_AUTH_TOKEN=mcp-auth-token:latest,PUMPPORTAL_API_KEY=pumpportal-key:latest,GMGN_API_KEY=gmgn-api-key:latest" \
  --min-instances 0 --max-instances 1 \
  --allow-unauthenticated

Verify your working directory first. --source . uploads whatever directory you're standing in — running it from ~ tries to upload your entire home folder, SSH keys included.

Then set PUBLIC_URL to the URL it printed, and redeploy config:

gcloud run services update pumpfun-connector --region <REGION> --project <GCP_PROJECT_ID> \
  --update-env-vars PUBLIC_URL=<SERVICE_URL>

Cloud Run gives each service two URLs — a legacy hash form (<service>-<hash>-<region>.a.run.app) and a newer deterministic form (<service>-<project-number>.<region>.run.app). Both work, but OAuth issuer matching is strict: pick one and use it for both PUBLIC_URL and the connector URL in Claude.

Step 8 — Connect to Claude

Claude → Settings → Connectors → Add custom connector:

  • Name: anything

  • URL: <SERVICE_URL>/mcp

Leave "Sign in now" and "Register automatically" selected — both are detected from the server's OAuth metadata. Claude redirects to an approval page; enter your MCP_AUTH_TOKEN.

One approval lasts indefinitely as long as you use the connector at least monthly — access tokens last an hour and refresh silently, and refresh tokens (30 days) rotate on each use.

Step 9 — Verify

Ask Claude to run gdrive_status. Success returns both spreadsheet titles and their tabs, which exercises the whole chain: Claude → OAuth → Cloud Run → service account → Sheets.

Then get_risk_score on any mint. A populated gmgn block confirms that integration too.


Updating later

Change

Command

Time

Config only (env var, secret, scaling)

gcloud run services update ...

seconds

Code

gcloud run deploy --source . ...

3–5 min (rebuilds)

services update reuses the existing image, so a code change needs the full deploy. Use --update-env-vars (touches only what you name) rather than --set-env-vars, which replaces the entire set and will silently drop your wallet key and spreadsheet ids.

Troubleshooting

Symptom

Cause

OAuth page rejects the correct secret

Trailing newline in the stored secret — see Step 6

OAuth metadata shows issuer: http://localhost:8080

PUBLIC_URL not set on the deployed revision

OAuth fails after appearing to start

PUBLIC_URL and the connector URL are different Cloud Run URLs for the same service

ZIP does not support timestamps before 1980

You ran --source . from the wrong directory

Tools missing in Claude after a deploy

Claude caches the tool list per connection — reconnect the connector

get_new_tokens returns nothing

Expected with CPU throttling; see Known limitations

Sheets tools report 403

Spreadsheets not shared with the service account — gdrive_status prints the address to use

Sheet totals stay at zero

Workbook imported from .xlsx instead of provisioned — run npm run provision:sheets

Known limitations / open items

  • PumpPortal, RugCheck, and GMGN are third-party, unofficial APIs — pump.fun has no official public API. Field shapes and endpoints can drift; every client in src/clients/ degrades gracefully (returns "unavailable" rather than crashing) if a response shape changes, but you should periodically sanity-check get_risk_score output against the RugCheck/GMGN websites directly.

  • get_token_detail price data is only available for tokens this server has observed live trades for (it auto-subscribes on first call — call again a few seconds later if price fields are empty).

  • get_position's cost-basis/P&L is an estimate based on this server's own log of prepared buys, not confirmed on-chain fills. The holdings and current value themselves are read directly from the chain and are accurate; the P&L number is not.

  • No stop-loss automation, by design — this mirrors the trade profile this project was built around (small, fully-disposable position sizes; sizing is the risk control).

Available Tools

18 tools
close_planA

Close out a finished plan: marks its 'Active Positions' row and all its 'Creator Activity' rows as CLOSED in the working spreadsheet. Nothing is deleted — rows stay in place so the evidence trail remains auditable and the sheet's formulas keep their alignment. The permanent trade-log spreadsheet is untouched. Refuses unless the plan's formula-computed Status reads 'Closed' (all bought tokens sold), unless force is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoClose even if Status is not yet 'Closed' — e.g. after a rug where tokens are unsellable.
planIdYesPlan ID to close.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and discharges it well: it discloses that nothing is deleted, that rows remain for auditability, that spreadsheet formulas stay aligned, and that the permanent trade-log is untouched. It also reveals the refusal condition and the force escape hatch — the sort of state-mutation behavior an agent cannot infer from the schema.

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?

Four sentences, each carrying distinct information (what is marked, what is preserved, what is untouched, when it refuses), with the action front-loaded. No filler or restatement of the name.

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?

Side effects on the working vs. permanent spreadsheets and the guard condition are all covered, which is what matters for a state-mutating tool. The only minor gap is the return value/confirmation shape, but with no output schema that is a low-priority omission.

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% and both parameters are already documented (force with a rug example, planId). The description references the force override and the Status condition but adds no syntax or format detail beyond the schema, so the 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?

States a specific verb+resource ('Close out a finished plan') and enumerates exactly what changes ('marks its Active Positions row and all its Creator Activity rows as CLOSED in the working spreadsheet'). An agent can immediately tell this apart from write-oriented siblings like update_active_position or execute_sell.

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?

Gives an explicit precondition ('Refuses unless the plan's formula-computed Status reads Closed') and the override path ('unless force is set'), which tells the agent when the call will succeed. It does not name an alternative tool for the force/rug scenario, so the routing guidance is strong but not exhaustive.

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

create_investment_planA

Create a new investment plan BEFORE any buy. Writes one row to 'Investment Plans' in the permanent trade-log spreadsheet and a matching row (status ACTIVE) to 'Active Positions' in the working spreadsheet, sharing a newly generated Plan ID. Per the spec, no buy should be prepared without a Plan ID existing first — the plan is the thesis on record justifying the trade. The aggregate columns (Total Invested, P&L, Status) are sheet formulas and are never written by this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
thesisYesWritten investment thesis — why this token could be a winner.
riskScoreYesComposite risk score from get_risk_score at plan creation time.
quickNotesNoShort working notes for the active-positions row.
buyStrategyYesPlanned buy strategy, e.g. 'DCA: 2 buys of $7-8 within first 4h if momentum holds'.
tokenTickerYesToken ticker, e.g. DOGEWIF.
sellStrategyYesPlanned sell strategy, e.g. 'Staggered TP: 50% at +30%, rest at +60%'.
entryPriceUsdNoEntry price in USD, if known.
nextReviewIsoNoISO timestamp for the suggested next review.
lifecyclePhaseNoLifecycle phase: Launch / Trending / Plateau / Decline.
socialEvidenceYesCreators / social evidence supporting the thesis, e.g. '@cryptoAlphaX (28k), @solanaGemsHunter (61k)'.
socialMomentumNoCurrent social momentum: Growing / Stable / Declining.
contractAddressYesToken mint address.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses the dual-row write, the shared generated Plan ID, the ACTIVE status, and a crucial negative constraint that aggregate columns are sheet formulas never written by this tool. This is exactly the kind of non-obvious behavior an agent needs.

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?

Three tightly packed sentences with zero waste: the ordering constraint is front-loaded, the write mechanics follow, and the formula-column exclusion closes with a useful negative. Every sentence earns its place.

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 12-param write tool with no annotations and no output schema, the description supplies the missing behavioral context (dual write, Plan ID, formula columns) while the rich schema handles parameter details. Nothing essential to correct invocation is absent.

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%, so the schema already documents all 12 parameters thoroughly, including examples for buyStrategy and sellStrategy. The description adds no per-parameter guidance beyond what the schema provides, which is the correct baseline when schema coverage is complete.

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?

States a specific verb+resource ('Create a new investment plan') and immediately clarifies ordering relative to siblings ('BEFORE any buy'), distinguishing it from prepare_buy/execute_buy. The double-write behavior to 'Investment Plans' and 'Active Positions' is named precisely.

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 guidance that no buy should be prepared without a Plan ID existing first, effectively routing the agent to call this before prepare_buy/execute_buy. Does not name alternative tools explicitly, but the workflow ordering is unmistakable.

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

execute_buyB

Risk-check, build, sign, and broadcast a pump.fun buy. Requires AUTO_TRADING_ENABLED=true and the configured keypair.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address to buy.
usdAmountYesUSD size. Must be between $10 and $20.
slippagePctNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description bears the full burden. It usefully discloses the multi-stage pipeline (risk-check -> build -> sign -> broadcast) and the required env flag/keypair, which signals an irreversible on-chain write. It stops short of saying the transaction is irreversible, that funds leave the wallet, or how a failed risk-check is surfaced.

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, zero filler, with the action sequence front-loaded and the prerequisite relegated to a second sentence. Every clause carries information.

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

Completeness3/5

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

For a real-money mutation tool with no annotations and no output schema, the description covers the operation and auth gate but omits slippage semantics, the failure mode when the risk check fails, and whether a transaction signature is returned. Adequate but with recognizable gaps.

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 67%: mint and usdAmount are described in the schema (usdAmount even carries the $10-$20 bound), but slippagePct is undocumented in both places. The description adds no parameter-level meaning of its own, so this sits at the baseline-3 level for partial coverage.

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

Purpose4/5

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

The description gives a precise verb chain ("Risk-check, build, sign, and broadcast") applied to a specific resource ("a pump.fun buy"). An agent can immediately tell this executes a real trade, and "broadcast" implicitly separates it from the prepare_buy sibling, though that sibling is never named.

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?

It states a prerequisite (AUTO_TRADING_ENABLED=true, configured keypair) but never says when to reach for this tool versus prepare_buy or the sell path. No conditions, no exclusions, no alternative routing are given, so the agent must infer usage from the name alone.

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

execute_sellA

Build, sign, and broadcast a pump.fun sell for part or all of a held position. Requires AUTO_TRADING_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address to sell.
slippagePctNo
percentOfHoldingsNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It correctly discloses the mutation nature of the operation and the environment gating flag, which is genuinely useful. It omits the traits that matter most for a live trading execution — irreversibility of the broadcast, whether funds move on mainnet, and failure/confirmation 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?

Two short sentences, both earning their place: the first states the operation, the second states the gating requirement. The core action is front-loaded with no filler.

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

Completeness3/5

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

For a high-risk financial execution tool with no annotations, no output schema, and low parameter coverage, the description meets the minimum but leaves key gaps: slippage semantics, irreversibility, and what constitutes success/failure are all absent.

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 only 33%; mint is documented but slippagePct and percentOfHoldings are not. The phrase 'part or all of a held position' does add conceptual meaning to percentOfHoldings beyond its raw default/bounds, but slippagePct is left entirely unexplained.

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

Purpose4/5

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

The description states a specific verb chain (build, sign, broadcast) and resource (a pump.fun sell) and scopes it to 'part or all of a held position.' An agent can infer this is the execution counterpart to prepare_sell, but no sibling is named explicitly, so it falls short of full differentiation.

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?

It states one concrete prerequisite (AUTO_TRADING_ENABLED=true), which is useful context for when invocation can succeed. However, it never contrasts this with prepare_sell or execute_buy, and gives no guidance on when not to use it, leaving the routing decision to inference.

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

gdrive_statusA

Check that the connector can reach both Google Sheets. Reports the identity it's authenticating as (the service account email, when running on Cloud Run or with a key file) and each spreadsheet's title and tab names. Run this first — if it reports a permission error, share both spreadsheets with the service account email it prints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the authentication identity (service account email, Cloud Run or key file context) and the diagnostic output (spreadsheet titles and tab names), and explains the permission-error scenario. It does not explicitly state that the operation is read-only or has no side effects, but the word 'Check' strongly implies it — a minor gap.

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?

Three sentences, front-loaded with the core purpose, followed by output details and then the critical 'Run this first' instruction. Every sentence earns its place and the structure is easy to parse.

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?

Given a simple diagnostic tool with an empty input schema, no output schema, and no annotations, the description is complete: it covers purpose, when to run, what it returns, and how to resolve a common error. An agent has everything needed to call it 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 takes zero parameters, so the schema provides no parameter descriptions. The description appropriately does not discuss parameters, and the baseline for zero-parameter tools is 4.

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 ('Check') and resource ('connector can reach both Google Sheets') and clarifies that it reports authentication identity plus spreadsheet metadata. It distinguishes itself as a diagnostic/preflight tool from any operational siblings, leaving no ambiguity about what it does.

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?

It explicitly instructs 'Run this first' and provides the exact remediation path if a permission error occurs ('share both spreadsheets with the service account email it prints'). This gives clear when-to-use and what-to-do-on-failure guidance without requiring inference.

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

get_market_activityA

Live trading activity for a token from DexScreener: buy vs sell counts, volume and price change across 5m / 1h / 6h / 24h, aggregated across every pair the token trades on. Returns derived signals too — buy/sell ratio per window, whether buying pressure is strengthening or weakening as the window shortens, volume acceleration against the 24h average, liquidity as a share of market cap, and token age mapped to a lifecycle phase. Use this alongside get_risk_score: risk scoring says whether a token is a scam, this says whether anyone is actually buying it. Works on any token DexScreener has indexed, which for a brand-new pump.fun launch can lag the launch by a few minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address (base58 Solana public key).

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it does a good job: it discloses the upstream data source, that data is aggregated across all trading pairs, and that indexing can lag new launches by minutes. It stops short of documenting rate limits, failure behavior for unindexed tokens, or caching, which keeps it from a 5.

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

Conciseness4/5

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

The core purpose and scope are front-loaded in the first sentence, and the signal list and sibling routing follow logically. It is dense and slightly long, but nearly every clause carries information an agent needs.

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?

With no output schema and no annotations, the description compensates well by enumerating the derived signals returned and the aggregation scope. It still omits error behavior for unindexed tokens and any rate/refresh constraints, leaving a small gap for a data-fetch tool.

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?

There is a single parameter (mint) with 100% schema description coverage, so the schema already defines it as a base58 Solana public key. The description adds no extra syntax or format guidance beyond what the schema states, 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?

States a specific verb+resource ('Live trading activity for a token') plus the data source (DexScreener) and the exact metrics returned. It also contrasts itself with sibling get_risk_score, so an agent can distinguish it without opening another schema.

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 routing guidance: 'Use this alongside get_risk_score: risk scoring says whether a token is a scam, this says whether anyone is actually buying it.' It also states a caveat for when it works (any indexed token) and a known limitation (pump.fun launches can lag a few minutes).

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

get_new_tokensA

List newly launched pump.fun tokens observed by this server's live feed since it started. Returns mint address, name, symbol, creator, and how long ago each was seen. This is a discovery tool only — it does not assess safety, use get_risk_score for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of tokens to return, most recent first.
maxAgeMinutesNoOnly return tokens first seen within this many minutes. Omit for no age limit.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does disclose meaningful traits: results are bounded by how long the server's live feed has been running ('since it started'), and the tool deliberately performs no safety analysis. It does not mention rate limits, pagination beyond the limit param, or refresh cadence, which keeps it short of a 5.

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?

Three sentences, front-loaded with purpose, then return payload, then the safety disclaimer. Every sentence carries distinct information with no filler.

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 having no output schema, the description enumerates the returned fields (mint, name, symbol, creator, age), which is exactly what an agent needs. The remaining gap is the absence of any note about refresh/streaming behavior or empty-feed conditions, minor for a two-optional-param read tool.

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%, so both 'limit' (most recent first) and 'maxAgeMinutes' are already fully documented in the schema. The description adds no additional parameter semantics such as ordering or unit conventions, so the baseline 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?

States a specific verb (List) and resource (newly launched pump.fun tokens) plus the data source scope ('observed by this server's live feed since it started'). It also explicitly distinguishes itself from the sibling get_risk_score, so an agent can differentiate without opening any schema.

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?

Explicitly frames the tool as a discovery-only tool and routes safety assessment to get_risk_score. The when-to-use condition (finding fresh launches) and the when-not-to-use condition (safety evaluation) are both stated outright.

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

get_plansA

Read back all investment plans from the permanent spreadsheet, including the formula-computed totals (Total Invested, Realized P&L, Status). Use this for the track-record loop — reviewing which entry signals actually worked before committing to a new trade.

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdNoIf provided, return only this plan.
openOnlyNoIf true, return only plans whose Status is not 'Closed'.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses two useful traits: the data comes from a 'permanent spreadsheet' and the totals are 'formula-computed' (i.e., derived rather than stored), which tells the agent the values are freshly computed. It says nothing about auth requirements, rate limits, or failure behavior.

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

Conciseness4/5

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

Two tight sentences with the core action front-loaded and the use-case following. The parenthetical field list is slightly bulky but earns its place by naming the return contents in the absence of an output schema.

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?

With only two fully-described optional parameters and no output schema, the description covers what is returned and when to reach for it, so an agent can call it confidently. It omits only edge-case behavior such as what an empty or unknown planId yields.

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%, so the schema already documents 'planId' (return only this plan) and 'openOnly' (exclude Closed status). The description adds no syntax or filtering detail beyond that baseline, merely saying 'all investment plans'.

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

Purpose4/5

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

The description gives a specific verb and resource ('Read back all investment plans') and names the returned fields (Total Invested, Realized P&L, Status), so an agent knows exactly what this yields. It implies its place relative to trade-committing siblings but never names one explicitly, so it falls just short of full sibling differentiation.

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?

It states a clear use context — the 'track-record loop', reviewing which entry signals worked before committing to a new trade — which effectively positions it against create_investment_plan and the trade-execution siblings. It stops short of explicit alternatives or when-not-to-use conditions.

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

get_positionA

Read the configured wallet's current on-chain holdings (source of truth — reads the chain directly, doesn't rely on this server's own trade history) and, where available, an estimated unrealized P/L based on this server's log of prepared buys for that mint. Since trades are signed manually by you, cost-basis is an estimate: it assumes prepared buys were actually executed at roughly the sizes requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintNoIf provided, only report on this mint. Otherwise reports all SPL token holdings in the wallet.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it reads the chain directly, the P/L is an estimate based on this server's log of prepared buys, and cost-basis assumes prepared buys were executed. It doesn't specify authentication requirements or rate limits, which would be useful for a wallet-reading tool.

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?

Three sentences, each earning its place: the first states the primary purpose and source of truth, the second explains the P/L estimate and its basis, the third clarifies the cost-basis assumption. Front-loaded with the main function and no wasted words.

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 read-only position tool with one optional parameter, no output schema, and no annotations, the description covers what the tool returns (holdings, estimated P/L), the data source (on-chain), and the caveat about P/L estimation. It provides enough context for an agent to invoke it correctly and interpret the results, though more detail on return format could help.

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?

With 100% schema description coverage (the mint parameter is fully documented), the baseline is 3. The description contextually reinforces that the tool reports on all holdings otherwise, but doesn't add new semantic information beyond the schema. The description does not contradict the schema. Baseline 3 is appropriate, but the description's explanation of the mint filter's role in the context of reporting adds marginal value, so 4 is justified.

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?

States a specific verb and resource: 'Read the configured wallet's current on-chain holdings'. It distinguishes itself from siblings like review_positions by explicitly noting it doesn't rely on the server's trade history, and the scope is further clarified with filtering by mint. An agent can tell exactly what this tool does.

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 clear context for when to use it—when you need a source of truth for on-chain holdings directly from the chain, and when you need an estimated unrealized P/L. It implies usage but doesn't explicitly state when not to use it or list alternative tools like review_positions. Still, the source-of-truth framing is strong guidance.

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

get_risk_scoreA

Compute a composite rug-pull risk score (0-100, higher = riskier) for a token mint by combining RugCheck (mint/freeze authority, LP lock, holder concentration, mutable metadata) and GMGN (rug ratio, bundled/insider buy detection, holder concentration). Returns the score, whether it clears the configured threshold, and a human-readable list of triggered flags. You must call this for a mint (and it must pass) before prepare_buy will accept it.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address (base58 Solana public key).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the return payload (score, threshold pass/fail, triggered flags) and the external data sources, which is useful. However, it does not state whether the call is a pure read or triggers external network/API fetches, what happens on failure or for an invalid mint, or any rate/latency behavior, leaving a meaningful gap for an un-annotated tool.

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?

Three sentences, each earning its place: what is computed and from which sources, what is returned, and the hard workflow prerequisite. The most decision-relevant constraint (must call before prepare_buy) is placed last but is unambiguous and clearly set off.

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?

There is no output schema, so the description correctly explains the return shape (numeric score, threshold boolean, human-readable flags), and it covers the critical gating relationship with prepare_buy. It falls short only on failure/error behavior and whether the call has external dependencies or side effects, which would matter for a scoring tool hitting third-party APIs.

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?

Only one parameter and schema description coverage is 100%, so the schema already documents the base58 Solana mint address fully. The description confirms the mint is the subject of the computation but adds no syntax, format, or validation detail beyond the schema, so baseline 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?

States a specific verb and resource (compute a rug-pull risk score for a token mint), distinguishes itself from siblings like get_token_detail and get_new_tokens by naming the composite data sources (RugCheck, GMGN), and defines the scale (0-100, higher = riskier). An agent immediately knows what this does.

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?

Explicitly states the mandatory workflow condition: 'You must call this for a mint (and it must pass) before prepare_buy will accept it.' This is a concrete when-to-use rule with a named dependent sibling (prepare_buy), leaving nothing to inference about sequencing.

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

get_token_detailA

Get price/liquidity/holder/contract detail for a specific pump.fun token mint. Combines this server's live trade feed (bonding curve state, implied price) with RugCheck's on-chain report (holders, mint/freeze authority, metadata). Live price data is only available for tokens this server has observed trades for — call this once to subscribe, then again a few seconds later if price fields are missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address (base58 Solana public key).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the live-data availability constraint and the subscription/retry semantics, which an agent could not infer from the schema. It omits permission/rate-limit behavior, but for a read-only lookup the disclosed constraints are substantial.

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 tight sentences: the first front-loads what is returned and its sources, the second covers the one non-obvious behavioral caveat. No filler.

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?

With no output schema or annotations, the description must convey return content, and it enumerates the concrete fields (bonding curve state, implied price, holders, mint/freeze authority, metadata) plus the missing-price edge case. An agent has everything needed to call and interpret it.

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?

There is one parameter and schema coverage is 100%, so the schema already documents the mint address and its base58 format. The description adds no format or constraint detail beyond that, 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?

States a specific verb and resource ('Get price/liquidity/holder/contract detail for a specific pump.fun token mint') and enumerates the data domains returned, which separates it from narrow siblings like get_risk_score or get_new_tokens.

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?

Gives actionable usage context: it explains the source mix (live trade feed vs RugCheck report) and prescribes a retry pattern ('call this once to subscribe, then again a few seconds later if price fields are missing'). It does not, however, name an alternative sibling or state when not to use it.

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

log_creator_activityA

Append one creator-mention row to the append-only 'Creator Activity' sheet for an open plan. This is the evolving evidence trail used to decide whether to hold or exit — distinct from the static thesis written once at plan creation. Should be logged at least daily while a plan is open.

ParametersJSON Schema
NameRequiredDescriptionDefault
toneYesTone: Positive / Neutral / Negative.
notesNoAssessment notes, e.g. whether the account looks paid or organic.
planIdYesPlan ID this activity relates to.
platformYesPlatform, e.g. 'X (Twitter)', 'Telegram', 'TikTok'.
followersNoApproximate follower count.
engagementNoEngagement summary, e.g. '412 likes / 38 replies'.
mentionTypeYesType of mention, e.g. 'First mention', 'Repost', 'Video'.
tokenTickerYesToken ticker.
creatorHandleYesCreator account, e.g. @cryptoAlphaX.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the append-only, single-row nature and the daily cadence, which implies no update/delete semantics. It omits auth requirements, duplicate-handling, error behavior, and what is returned after the append.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action, then the rationale, then the cadence rule. The thesis contrast earns its place by preventing confusion with plan-creation content. Minor: it is slightly more discursive than strictly necessary.

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 purpose, precondition (open plan), cadence, and the semantic distinction from the static thesis. With no output schema and no annotations, an agent has enough to invoke correctly, though return behavior and failure modes remain unspecified.

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%, so all nine parameters are already documented in the schema with examples. The description only references the creator-mention row and the open-plan requirement, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Append one creator-mention row to the append-only Creator Activity sheet.' The word 'one' implicitly contrasts with the log_creator_activity_batch sibling, and the thesis distinction clarifies what this log is not. It stops short of naming the batch sibling explicitly, so differentiation is inferential rather than stated.

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?

Gives a clear cadence guideline ('logged at least daily while a plan is open') and scopes it to open plans, which is genuine usage context. However it never names the batch alternative (log_creator_activity_batch) or says when a single append is preferable to a batch, so the routing decision is left to inference.

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

log_creator_activity_batchA

Append several creator-mention rows at once — the efficient way to record a periodic review sweep, since it's one round trip and one spreadsheet write instead of one per mention. Entries may span multiple plans. Prefer this over repeated log_creator_activity calls whenever you have more than one mention to record.

ParametersJSON Schema
NameRequiredDescriptionDefault
entriesYesCreator mentions to record.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. It does disclose that this is a write ('one spreadsheet write'), append-only, and batched into one round trip, which is useful context. However it omits error handling for partial batch failures, idempotency/duplicate behavior, and any permission requirements.

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?

Three tight sentences, front-loaded with the action and scope, followed by the efficiency rationale and the routing rule. No filler; every sentence 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?

For a one-parameter batch-append tool with no annotations or output schema, the description covers purpose, efficiency benefit, and cross-plan scope. It lacks any note on batch failure semantics or return behavior, but with no output schema that gap is minor.

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 single parameter has 100% schema description coverage, so the schema already documents every nested field. The description adds a small amount of meaning — that entries may span multiple plans, clarifying the planId-per-entry structure — but mostly rests on the schema baseline.

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?

States a specific verb (Append) and resource (creator-mention rows) with explicit batch scope ('several ... at once'), and distinguishes itself from the singular sibling log_creator_activity. An agent can tell immediately what this does and how it differs from the single-entry version.

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?

Explicitly names the alternative ('Prefer this over repeated log_creator_activity calls') and the precise condition that selects it ('whenever you have more than one mention to record'). It also notes entries may span multiple plans, removing a likely source of hesitation.

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

log_transactionA

Append one transaction row (Buy or Sell) to the permanent 'Trade Log' sheet, tagged with its Plan ID. Call this after a trade actually settles on-chain — one row per leg, so a DCA entry or a scaled take-profit exit produces several rows under the same Plan ID. The Investment Plans sheet recalculates its totals automatically from these rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesTransaction type. Must be exactly "Buy" or "Sell" — the spreadsheet's aggregate formulas filter on these literal strings.
notesNoShort note, e.g. '1st DCA leg' or 'TP1: 50% at +30%'.
planIdYesPlan ID this transaction belongs to, e.g. PLAN-0001.
priceUsdYesExecution price per token in USD.
tokenQtyYesNumber of tokens bought or sold.
amountUsdYesTotal USD value of this transaction.
tokenTickerYesToken ticker.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful traits: the row is appended to a 'permanent' sheet (append-only semantics), one row per leg, and the Investment Plans sheet recalculates totals automatically from these rows. It omits error/duplicate handling and whether rows can later be amended, so not a 5.

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?

Three tight sentences, front-loaded with the action and destination, then timing, then the multi-leg nuance, then the downstream effect. No sentence is filler.

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 7-parameter, no-annotation, no-output-schema tool, the description covers what it does, when to call it, and its side effects on the plans sheet. It stops short of stating the confirmation/return behavior, which would matter for an agent verifying the append succeeded.

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%, including the enum constraint on type and per-field descriptions, so the baseline is 3. The description adds the Plan-ID tagging concept but no format or validation detail beyond what the schema already provides.

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?

States a specific verb and resource ('Append one transaction row ... to the permanent Trade Log sheet') plus the scoping key ('tagged with its Plan ID'). An agent can distinguish this record-keeping tool from execution siblings like execute_buy/execute_sell without opening either schema.

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?

'Call this after a trade actually settles on-chain' gives a clear triggering condition, and the one-row-per-leg rule (DCA entry or scaled TP exit produce several rows under one Plan ID) tells the agent when to call it repeatedly. It doesn't explicitly name execute_buy/execute_sell as the alternative it follows, so 4 rather than 5.

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

prepare_buyA

Build an UNSIGNED buy transaction for a pump.fun token, sized within the configured per-trade and spend-cap limits. This server never holds a private key and never signs or broadcasts anything — it returns a base64-encoded transaction for you to review and sign yourself in your own wallet (e.g. paste into a wallet that supports raw transaction signing, or use the accompanying CLI/script). Refuses to build the transaction unless get_risk_score has been called recently for this mint and it passed the configured threshold, and unless the requested USD size is within [MIN_TRADE_USD, MAX_TRADE_USD] and the daily/weekly spend caps.

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address to buy.
usdAmountYesUSD size for this buy. Must be between $10 and $20.
slippagePctNoOverride default slippage tolerance (%).

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the whole burden and does so: it declares the non-custodial model (never holds a private key, never signs or broadcasts), the exact artifact returned (a base64-encoded transaction), the rejection conditions (stale/failed risk score, out-of-range USD size, breached daily/weekly caps), and how a human consumes the output. This is unusually rich behavioral disclosure for a mutation-adjacent tool.

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?

Three sentences, each doing distinct work: what is built, what the server will and will not do plus how to use the result, then the refusal conditions. Front-loaded on the core action with no filler or repetition of the schema.

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?

No output schema exists, and the description compensates by naming the return value (base64 transaction) and the consumption path. Combined with the prerequisite chain and refusal conditions, an agent has everything needed to call this correctly and to explain the result, which is thorough for a 3-parameter tool.

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%, so the schema already documents mint, usdAmount and slippagePct, including the $10–$20 bound. The description reinforces the sizing constraint via the [MIN_TRADE_USD, MAX_TRADE_USD] phrasing and the spend-cap context, but adds nothing about slippagePct semantics or default slippage behavior, so the baseline 3 holds.

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?

States a specific verb and resource ('Build an UNSIGNED buy transaction for a pump.fun token') and immediately scopes it as unsigned, which separates it cleanly from execute_buy (which would broadcast) and from prepare_sell. An agent can pick this out of a 17-tool sibling list without opening a schema.

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?

Gives explicit preconditions — get_risk_score must have been called recently for this mint and passed, and the size must fall in [MIN_TRADE_USD, MAX_TRADE_USD] and the spend caps — plus the downstream step (review/sign in your own wallet). It stops short of naming the post-signing sibling (execute_buy) or contrasting directly with prepare_sell, so selection is clear but not fully routed.

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

prepare_sellA

Build an UNSIGNED sell transaction for a pump.fun position (take-profit or manual exit), sized as a percentage of your current holdings of that token. Like prepare_buy, this never signs or broadcasts anything — you sign the returned transaction yourself. No risk gate applies to exits (you're always free to sell).

ParametersJSON Schema
NameRequiredDescriptionDefault
mintYesToken mint address to sell.
slippagePctNoOverride default slippage tolerance (%).
percentOfHoldingsNoPercent of your current token balance to sell. Defaults to 100 (full exit).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: unsigned-only, no signing or broadcasting, caller signs the returned tx, and no risk gate on sells. It omits slippage-default behavior, balance sufficiency checks, and whether a quote or error is returned, so it is strong but not exhaustive.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and scope, followed by the signing contract and the exemption from the risk gate. No filler or repetition; every clause adds selection or invocation value.

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 3-parameter tool with no output schema, the description covers the signing workflow, the absence of a risk gate, and the sizing model, which is everything an agent needs to invoke it correctly and safely. Return-value detail is unnecessary because the tool's contract is producing an unsigned transaction.

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%, so all three parameters are already documented in the schema, including percentOfHoldings defaulting to 100 for a full exit. The description reinforces the percentage-of-holdings intent but adds no syntax or format detail beyond the schema, making the baseline 3 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?

States a specific verb and resource (build an unsigned sell transaction) with the exact scope: a pump.fun position sized as a percentage of current holdings, for take-profit or manual exit. An agent can distinguish this from prepare_buy and from the execute_* siblings without opening any schema.

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?

Clearly frames this as the unsigned-preparation step ('Like prepare_buy, this never signs or broadcasts anything — you sign the returned transaction yourself') and notes no risk gate applies to exits. It does not explicitly name execute_sell as the alternative or state when to prefer one over the other, so routing is implied rather than spelled out.

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

review_positionsA

The full picture of your open positions, rebuilt from the spreadsheets rather than from anything remembered in this conversation. For each open plan it returns: the written thesis and social evidence recorded at entry, the planned buy/sell strategy, position sizing and realized P&L (from the sheet's formulas), the creator-activity trail, and — read live from chain and the price feed, not the sheet — current holdings, price, and unrealized P&L. Also flags positions whose next-review time has passed. Start here when picking up an existing position; it's the durable memory this connector is built around.

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdNoReview one plan. Omit to review all open positions.

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: data provenance is disclosed ('rebuilt from the spreadsheets rather than anything remembered in this conversation'), live vs. cached is split explicitly (chain/price feed for holdings, price, unrealized P&L; sheet formulas for realized P&L), and the overdue-review flag is surfaced.

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

Conciseness4/5

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

Front-loaded with purpose, then a structured enumeration of returned fields, then the routing hint. Dense but every clause earns its place; the 'durable memory' closing line is slightly ornamental but reinforces the mental model.

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 read-only review tool with no annotations and no output schema, the description supplies the essential context: what's returned, where data comes from, and when to reach for it. It does not discuss pagination or response size for the all-positions case, a minor gap.

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% and the single planId parameter is already documented in the schema. The description's 'review all open positions' phrasing reinforces the omit semantics but adds no syntax or format detail beyond the schema. Baseline 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?

Precise verb+resource (review open positions) with an explicit scope statement: 'the durable memory this connector is built around.' It clearly distinguishes itself from siblings like get_position (single) and get_plans (plan definitions) before those schemas are even opened.

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?

Gives a clear when-to-use ('Start here when picking up an existing position') and a scoping mechanism (planId vs. omit for all). It does not explicitly name a sibling or the when-not condition (e.g., versus get_position), so it falls 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.

update_active_positionA

Update the working columns of an open position in 'Active Positions' — lifecycle phase, social momentum, next review time, and quick notes. Stamps the last-review timestamp automatically. The computed columns (active creator count, creator list, last mention) are sheet formulas and are left untouched, as is the ACTIVE/CLOSED status — use close_plan to change that.

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdYesPlan ID to update.
quickNotesNoShort working notes.
nextReviewIsoNoISO timestamp for next suggested review.
lifecyclePhaseNoLaunch / Trending / Plateau / Decline.
socialMomentumNoGrowing / Stable / Declining.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it discloses that the last-review timestamp is stamped automatically, computed columns are sheet formulas and are left untouched, and ACTIVE/CLOSED status is not changed here. It does not cover permissions, error behavior, or rate limits, so it is not fully exhaustive.

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?

Three sentences, front-loaded with the action and scope, then side effects, then exclusions. Every sentence adds useful information and nothing is 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?

Given a rich input schema, no annotations, and no output schema, the description covers the mutation scope, automatic side effects, untouched computed columns, and the alternative tool for status changes. It provides enough context for an agent to invoke the tool correctly.

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%, so the schema already documents each parameter. The description lists the updatable fields but adds no syntax, format, or constraint details beyond what the schema provides; 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?

States a specific verb (update), resource (working columns of an open position in 'Active Positions'), and enumerates the affected fields. It also explicitly distinguishes the operation from close_plan for status changes, so the agent can select it without opening sibling schemas.

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 makes clear this is for updating an open position and explicitly says to use close_plan for ACTIVE/CLOSED status changes. It does not explain when to use update_active_position versus review_positions or get_position, so it falls short of full when/when-not/alternatives guidance.

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.

  1. 18 tool updatesv0.1.0
    • First observedclose_plan
    • First observedcreate_investment_plan
    • First observedexecute_buy
    • First observedexecute_sell
    • First observedgdrive_status
    • First observedget_market_activity
    • First observedget_new_tokens
    • First observedget_plans
    • First observedget_position
    • First observedget_risk_score
    • First observedget_token_detail
    • First observedlog_creator_activity
    • First observedlog_creator_activity_batch
    • First observedlog_transaction
    • First observedprepare_buy
    • First observedprepare_sell
    • First observedreview_positions
    • First observedupdate_active_position

TDQS

A3.9/5.0

Scored across 18 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: trading actions are split into prepare (unsigned) and execute (signed), position management includes get, review, update, and close, and logging is separated by transaction, single creator activity, and batch creator activity. No two tools appear to do the same thing; descriptions provide clear boundaries.

Naming Consistency4/5

Almost all tools follow a consistent verb_noun snake_case pattern (e.g., get_position, prepare_buy, log_transaction), with only gdrive_status deviating slightly as a noun phrase, but it remains understandable and unique. The overall convention is consistent and readable.

Tool Count3/5

With 18 tools, the set is slightly heavy for a connector, falling into the borderline range where the number may be more than needed for some workflows. However, each tool serves a specific purpose and none appear redundant, though consolidation could be possible.

Completeness4/5

The surface covers the full lifecycle: discovery (get_new_tokens), risk assessment (get_risk_score), market analysis (get_market_activity), planning (create_investment_plan, get_plans), position management (get_position, review_positions, update_active_position, close_plan), trading (prepare/execute buy/sell), and logging (log_transaction, log_creator_activity, log_creator_activity_batch). Minor gaps might include a direct tool to retrieve a specific plan by ID or to read trade history, but the sheets serve as the source of truth.

Maintenance

ActivityMaintained
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
    Not graded
    quality
    Not graded
    maintenance
    Enables high-performance token sniping on Raydium DEX with multi-region support and Claude AI integration, allowing users to monitor and execute token purchases through natural language commands.
    6
    -
  • F
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with the Pump.fun platform on Solana for creating, buying, and selling meme tokens. Provides comprehensive token management including balance checking, account management, and secure transaction handling.
    6
    8
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude to autonomously trade, analyze, and manage positions on Polymarket prediction markets with 45 comprehensive tools including market discovery, real-time monitoring, portfolio management, and AI-powered trading recommendations with enterprise-grade safety features.
    668
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude to autonomously trade, analyze, and manage positions on Polymarket prediction markets with 45 comprehensive tools covering market discovery, analysis, trading execution, portfolio management, and real-time monitoring with enterprise-grade safety features.
    MIT