Agent skill

MCP Testing

by adeze in adeze/raindrop-mcp

MCP Testing Strategies with Vitest, Inspector, and Integration Tests

MITAuto-check passedTesting & QA

Install MCP Testing

skills CLI
$ npx skills add adeze/raindrop-mcp --skill mcp-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install adeze/raindrop-mcp mcp-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/adeze/raindrop-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/mcp-testing .claude/skills/mcp-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mcp-testing
GitHub stars
188
Token cost
~1.6k tokens
SKILL.md length
285 words
Files
1
Skills in repo
6
Repo updated
First seen
Licence
MIT

At a glance

MCP Testing Strategies with Vitest, Inspector, and Integration Tests

  • Works in 4 steps: In-Memory Transport: Use for unit… → Server Capabilities: Verify manifest… → Mock Context: Provide mock… → …
  • Tasks that involve Unit testing
  • SKILL.md covers Unit Testing with Vitest &…, Integration Testing with MCP…, Snapshot Testing for Tool… and Running Tests in VS Code, plus 4 more sections
  • Calls bun

What it does

MCP Testing is an agent skill from adeze/raindrop-mcp. MCP Testing Strategies with Vitest, Inspector, and Integration Tests

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Unit testing, MCP servers and Integration testing. It works with Model Context Protocol, Vitest and Visual Studio Code. The licence is MIT.

When your agent uses it

  • Tasks that involve Unit testing
  • Tasks that involve MCP servers
  • Tasks that involve Integration testing

Example prompts

  • “/mcp-testing”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. In-Memory Transport: Use for unit tests—no subprocess overhead, direct method invocation
  2. Server Capabilities: Verify manifest before running tool tests
  3. Mock Context: Provide mock RaindropService for isolated tool testing
  4. Error Handling: Test both success and error paths with Zod validation

What it can do on your machine

Read from SKILL.md and the folder at commit 5b1e7f9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • vitest.dev
    • modelcontextprotocol.io
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

MCP Testing loads about 1.6k tokens when it runs. Until then it costs about 20 tokens; SKILL.md has 285 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~20
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from adeze/raindrop-mcp at commit 5b1e7f9, republished under its MIT licence (© adeze). 285 words, ~1,568 tokens.

Download SKILL.mdSave it as .claude/skills/mcp-testing/SKILL.md (or your agent's skills folder).
name
mcp-testing
description
MCP Testing Strategies with Vitest, Inspector, and Integration Tests
keywords
mcp, testing, vitest, inspector, unit-tests, integration-tests, ci-cd

MCP Testing Skill

Modern testing strategies for Model Context Protocol (MCP) servers developed in VS Code using TypeScript, Bun, and Vitest.

Unit Testing with Vitest & In-Memory Transport

Setup Minimal Test Environment
typescript
import { describe, it, expect, beforeEach } from "vitest";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { InMemoryTransport } from "@modelcontextprotocol/sdk/testing/inMemoryTransport.js";
import { RaindropMCPService } from "../src/services/raindropmcp.service.js";

describe("RaindropMCPService Tools", () => {
  let service: RaindropMCPService;
  let transport: InMemoryTransport;
  let client: Client;

  beforeEach(async () => {
    service = new RaindropMCPService();
    transport = new InMemoryTransport(service.getServer());
    client = new Client(
      {
        name: "test-client",
        version: "1.0.0",
      },
      { capabilities: {} },
    );
    await client.connect(transport);
  });

  it("should list available tools", async () => {
    const tools = await client.listTools();
    expect(tools.tools.length).toBeGreaterThan(0);
    expect(tools.tools.map((t) => t.name)).toContain("collection_list");
  });

  it("should call a tool with valid input", async () => {
    const result = await client.callTool({
      name: "collection_list",
      arguments: {},
    });
    expect(result).toBeDefined();
    expect(result.content).toBeDefined();
  });
});
Key Testing Patterns
  1. In-Memory Transport: Use for unit tests—no subprocess overhead, direct method invocation
  2. Server Capabilities: Verify manifest before running tool tests
  3. Mock Context: Provide mock RaindropService for isolated tool testing
  4. Error Handling: Test both success and error paths with Zod validation

Integration Testing with MCP Inspector

Launch Inspector in VS Code
  1. Terminal > Run Task > "Debug HTTP Server with Inspector" (or STDIO variant)

    • Opens Inspector at http://localhost:3000 (or via auto-opened browser)
    • Live tool/resource exploration with bidirectional message capture
  2. Manual Inspection Flow:

    • Call diagnostics tool → view server version and enabled tools
    • Call collection_list → see resource links to collections
    • Read collection resources by URI → validate dynamic resource handling
    • Test tool inputs directly with Inspector's form interface
  3. Record & Replay:

    • Inspector logs all requests/responses
    • Copy test cases directly into Vitest from Inspector logs
    • Validate against snapshot tests

Snapshot Testing for Tool Schemas

typescript
import { describe, it, expect } from "vitest";
import { RaindropMCPService } from "../src/services/raindropmcp.service.js";

describe("Tool Schema Snapshots", () => {
  let service: RaindropMCPService;

  beforeEach(() => {
    service = new RaindropMCPService();
  });

  it("should maintain consistent tool schemas", async () => {
    const tools = await service.listTools();
    expect(tools).toMatchSnapshot();
  });
});
Why Snapshot Testing?
  • Catches unintended schema changes (breaking for LLM clients)
  • Auto-generates golden files for schema validation
  • Reduces boilerplate when verifying complex schemas

Running Tests in VS Code

Run Tests with Coverage
bash
bun run test:coverage

Generates coverage reports showing:

  • Line & branch coverage for tools
  • Uncovered error paths
  • Integration test coverage vs unit test coverage
Watch Mode During Development
bash
bun test --watch
  • Re-runs tests on file changes
  • Ideal for TDD workflows
  • Vitest provides formatted output in terminal

Load & Performance Testing

Stress Test Tools with Concurrency
typescript
it("should handle concurrent tool calls", async () => {
  const promises = Array.from({ length: 10 }, () =>
    client.callTool({
      name: "collection_list",
      arguments: {},
    }),
  );

  const results = await Promise.all(promises);
  expect(results).toHaveLength(10);
  expect(results.every((r) => r.content)).toBe(true);
});
Measure Tool Latency
typescript
it("should respond within acceptable latency", async () => {
  const start = performance.now();
  await client.callTool({
    name: "bookmark_search",
    arguments: { search: "test" },
  });
  const duration = performance.now() - start;

  expect(duration).toBeLessThan(5000); // 5s timeout for API calls
});

Resource Testing

Test Dynamic Resource Resolution
typescript
it("should fetch and validate collection resources", async () => {
  const resources = await client.listResources();
  const collectionPattern = resources.resources.find((r) =>
    r.uri.includes("mcp://collection/"),
  );

  expect(collectionPattern).toBeDefined();

  // Read a specific collection
  const resourceData = await client.readResource({
    uri: "mcp://collection/12345",
  });

  expect(resourceData).toBeDefined();
  expect(Array.isArray(resourceData)).toBe(true);
  expect(resourceData[0].text).toBeDefined();
});
Test Error Conditions
typescript
it("should handle invalid resource URIs gracefully", async () => {
  expect(async () => {
    await client.readResource({ uri: "mcp://invalid/xyz" });
  }).rejects.toThrow();
});
Testing & Quality
json
{
  "devDependencies": {
    "vitest": "^4.0.0",
    "@vitest/coverage-v8": "^1.0.0",
    "@vitest/ui": "^1.0.0",
    "happy-dom": "^13.0.0"
  }
}
Code Quality & Linting
json
{
  "devDependencies": {
    "eslint": "^9.0.0",
    "@typescript-eslint/eslint-plugin": "^8.0.0",
    "@typescript-eslint/parser": "^8.0.0",
    "eslint-config-prettier": "^9.0.0",
    "prettier": "^3.0.0"
  }
}
Debugging & Inspection
json
{
  "devDependencies": {
    "@modelcontextprotocol/inspector": "^1.0.0"
  }
}

References

© adeze, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .github/skills/mcp-testing of adeze/raindrop-mcp.

Open the folder on GitHubat commit 5b1e7f9

Compare with similar skills

MCP Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

MCP Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
MCP Testing this skilladeze/raindrop-mcp188—~1.6kAutomated safety check: PassMIT
Adding LLM MCP ToolsTriliumNext/Trilium38k—~2.5kAutomated safety check: PassAGPL-3.0
Designing TestsCloudAI-X/claude-workflow-v21.4k1 repos~1.5kAutomated safety check: PassMIT
Sapui5secondsky/sap-skills460—~4.1kAutomated safety check: PassGPL-3.0
Frontmcp Testingagentfront/frontmcp146—~10kAutomated safety check: NotesApache-2.0
Hilla TestAI-Unified-Process/marketplace140—~3.9kAutomated safety check: WarnApache-2.0

Similar skills

  • Adding LLM MCP Tools

    TriliumNext/Trilium

    A skill your agent uses when adding, changing, or reviewing an LLM/MCP tool in Trilium (the defineTools definitions under packages/trilium-core/src/services/llm/tools/ —…

    38k GitHub stars~2.5k tokensUpdated today
    Testing & QAAuto-check passed
  • Designing Tests

    CloudAI-X/claude-workflow-v2

    Designs and implements testing strategies for any codebase. An agent skill from CloudAI-X/claude-workflow-v2.

    1.4k GitHub starsUsed in 1 repo~1.5k tokens
    Testing & QAAuto-check passed
  • Sapui5

    secondsky/sap-skills

    This skill should be used when developing SAP UI5 applications, including creating freestyle apps, Fiori Elements apps, custom controls, testing, data binding, OData integration, routing, and…

    460 GitHub stars~4.1k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Frontmcp Testing

    agentfront/frontmcp

    A skill your agent uses for anything about testing FrontMCP servers: writing or running unit, integration, and E2E tests and reaching the 95%+ coverage bar.

    146 GitHub stars~10k tokensUpdated today
    Testing & QAAuto-check: notes
  • Hilla Test

    AI-Unified-Process/marketplace

    Creates tests for Hilla use cases on both sides of the browser boundary: Vitest + React Testing Library tests for the React/TypeScript view (with the generated endpoint clients mocked) and Spring…

    140 GitHub stars~3.9k tokensUpdated 2 days ago
    Testing & QAAuto-check: warnings
  • Fantasia Arbor

    vishiri/fantasia-archive

    Project Arbor MCP code graph: callers/callees, impact, map, file graph.

    409 GitHub stars~528 tokensUpdated 5 days ago
    Testing & QAAuto-check passed

More from adeze/raindrop-mcp

  • MCP Inspector

    adeze/raindrop-mcp

    MCP Protocol Inspection and Debugging with Inspector CLI. An agent skill from adeze/raindrop-mcp.

    188 GitHub stars~421 tokensUpdated 2 mo ago
    Auto-check passed
  • MCP Refactoring

    adeze/raindrop-mcp

    Refactoring MCP Tools for Better LLM Integration and Usability

    188 GitHub stars~972 tokensUpdated 2 mo ago
    Auto-check passed
  • Publishing

    adeze/raindrop-mcp

    Publishing and release workflow with semantic-release and GitHub Actions

    188 GitHub stars~398 tokensUpdated 2 mo ago
    Auto-check passed
  • Dxt Packaging

    adeze/raindrop-mcp

    MCPB (Model Context Protocol Bundle) Packaging and Distribution

    188 GitHub stars~572 tokensUpdated 2 mo ago
    Auto-check passed
  • MCP Development

    adeze/raindrop-mcp

    MCP Server Development Patterns and Best Practices. An agent skill from adeze/raindrop-mcp.

    188 GitHub stars~855 tokensUpdated 2 mo ago
    Auto-check passed

Categories

Questions about MCP Testing

What does MCP Testing do?

MCP Testing Strategies with Vitest, Inspector, and Integration Tests. MCP Testing is an agent skill from adeze/raindrop-mcp.

When should I use MCP Testing?

MCP Testing fits situations like: tasks that involve Unit testing; tasks that involve MCP servers; tasks that involve Integration testing.

How do I install MCP Testing in Claude Code?

Run `npx skills add adeze/raindrop-mcp --skill mcp-testing -a claude-code`. Or copy the skill folder (.github/skills/mcp-testing in adeze/raindrop-mcp) into .claude/skills/mcp-testing in your project. Claude Code loads it when a task matches its description.

How do I install MCP Testing in Codex?

Run `npx skills add adeze/raindrop-mcp --skill mcp-testing -a codex`. Or copy the skill folder (.github/skills/mcp-testing in adeze/raindrop-mcp) into .agents/skills/mcp-testing in your project. Codex loads it when a task matches its description.

Can I use MCP Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adeze/raindrop-mcp --skill mcp-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mcp-testing, .gemini/skills/mcp-testing, .github/skills/mcp-testing and .opencode/skills/mcp-testing in your project.

What does MCP Testing need to run?

Going by SKILL.md and its folder, MCP Testing needs the command-line tools its instructions call (bun).

Does MCP Testing access the network?

SKILL.md names 3 domains. As links in the text: vitest.dev, modelcontextprotocol.io and github.com. This is read from the text; nothing was executed.

Is MCP Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does MCP Testing use?

MCP Testing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does MCP Testing use?

About 1.6k tokens (SKILL.md is roughly 6.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to MCP Testing?

Skills that share tags, products or a category with MCP Testing: Adding LLM MCP Tools (TriliumNext/Trilium, 38k stars), Designing Tests (CloudAI-X/claude-workflow-v2, 1.4k stars), Sapui5 (secondsky/sap-skills, 460 stars) and Frontmcp Testing (agentfront/frontmcp, 146 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains MCP Testing?

adeze (a GitHub user) maintains it in adeze/raindrop-mcp, which has 188 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on July 24, 2026.

Source: adeze/raindrop-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.