cd /news/ai-agents/your-mcp-server-s-tool-descriptions-… · home › topics › ai-agents › article
[ARTICLE · art-149899] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=· neutral

Your MCP server's tool descriptions are the product: a 40-line Node script to dump and review them

A developer published a dependency-free 40-line Node script that spawns any stdio MCP server, performs the initialize handshake, calls tools/list, and prints each tool's name, description and inputSchema parameters so authors can see what an agent actually reads. The post argues that vague tool descriptions cause models to pick the wrong tool or skip the right one, citing Glama's TDQS spec for scoring tool-definition quality, and offers a pay-what-you-want CLI, MCP Tool Docs Generator, that writes TOOLS.md, per-tool Markdown pages and tools.json.

by read2 min views1 publishedOct 12, 2026

Agents pick MCP tools by reading name, description and inputSchema from tools/list. If those are vague, the model picks the wrong tool, or skips the right one. Glama recently published an open spec for scoring this (TDQS, https://tdqs.dev), and the main complaint it addresses is inconsistent tool definitions.

Before you submit a server to a directory, read what an agent actually sees. Here is a dependency-free Node script that spawns any stdio MCP server, runs the handshake, and prints every tool.

// dump-tools.mjs  -  usage: node dump-tools.mjs <command> [args...]
import { spawn } from "node:child_process";

const [cmd, ...args] = process.argv.slice(2);
const p = spawn(cmd, args, { stdio: ["pipe", "pipe", "inherit"] });
let buf = "";
const pending = new Map();
let id = 0;

p.stdout.on("data", (d) => {
  buf += d;
  let i;
  while ((i = buf.indexOf("\n")) >= 0) {
    const line = buf.slice(0, i).trim();
    buf = buf.slice(i + 1);
    if (!line) continue;
    try {
      const m = JSON.parse(line);
      if (m.id != null && pending.has(m.id)) pending.get(m.id)(m);
    } catch {}
  }
});

const send = (method, params) =>
  new Promise((res) => {
    const myId = ++id;
    pending.set(myId, res);
    p.stdin.write(JSON.stringify({ jsonrpc: "2.0", id: myId, method, params }) + "\n");
  });

await send("initialize", {
  protocolVersion: "2024-11-05",
  capabilities: {},
  clientInfo: { name: "dump-tools", version: "0.1.0" },
});
p.stdin.write(JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized" }) + "\n");

const { result } = await send("tools/list", {});
for (const t of result.tools) {
  const props = Object.keys(t.inputSchema?.properties ?? {});
  console.log(`## ${t.name}\n${t.description ?? "(NO DESCRIPTION)"}\nparams: ${props.join(", ") || "none"}\n`);
}
p.kill();

(NO DESCRIPTION) line is a tool the model has to guess about.get_user: Gets a user tells the model nothing. Say what it returns and when to use it instead of a sibling tool.inputSchema for its own description, units and an example. A terminal dump is fine for you, but reviewers and users want a readable page. I packaged the same idea as a small zero-dependency CLI called MCP Tool Docs Generator. It connects to a stdio MCP server, calls initialize and tools/list, and writes a TOOLS.md, one Markdown page per tool, and a tools.json. It is pay-what-you-want with a $1 minimum: https://renevibe76.gumroad.com/l/bmzwpm

The script above is free to copy and enough to audit your own server. The packaged version is for when you want the files generated for your README.

── more in #ai-agents 4 stories · sorted by recency
── more on @glama 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/your-mcp-server-s-to…] indexed:0 read:2min 2026-10-12 · —