+ `allowJs`) — un-ignoring a file does nothing if no transform matches it |\n| Coverage below 95% | Untested error paths or conditional branches | Run `frontmcp test --coverage` and inspect uncovered lines in the report |\n| E2E test timeout | Server startup too slow or port conflict | Increase Jest timeout; use random port allocation |\n| DI resolution fails in tests | Provider not registered in test scope | Register mock providers before creating the test context |\n| Istanbul shows 0% on async methods | TypeScript source-map mismatch with Istanbul | Known issue with some TS compilation settings; verify coverage with actual test output |\n| Specs see no `.env` values | An older CLI did not load `.env` for `frontmcp test`, only for `dev` | Upgrade the CLI — `frontmcp test` now loads `.env` / `.env.local` with the same precedence as `dev` (real environment wins, so CI secrets still override). Pass `--no-env` for a hermetic run |\n| `Invalid first argument, true` at collection time | `test.skip(condition, reason)` reached Jest's `skip(name, fn)` | Upgrade the CLI — the Playwright signature is supported: `test.skip(!hasCredentials, 'credentials not set')` skips every test registered after it in the enclosing block |\n| `test.use()` in one `describe` leaks into another, or two files fight over a port | Older `@frontmcp/testing` kept one global config and per-process ports | Upgrade — `test.use()` is scoped per `describe` and ports are locked across Jest workers; use `port: 0` |\n| Every spec fails with `HTTP 404` after setting `http.entryPath` | The test client always connected to the server root | Upgrade the CLI — the client now follows the `entryPaths` a 404 reports, and `test.use({ entryPath: '/mcp' })` sets it explicitly |\n| `test.beforeEach(async ({ mcp }) => …)` times out waiting for `done` | Older `@frontmcp/testing` handed the hook to Jest, which read the parameter as `done` | Upgrade — hooks that take a parameter now receive the test's fixtures (same `mcp` as the test); `beforeAll` / `afterAll` never get fixtures |\n| `test.use({ transport: 'sse' })` throws \"SSE transport not yet implemented\" | Older `@frontmcp/testing` had no legacy SSE client | Upgrade — `'sse'` is the legacy HTTP+SSE transport; the server must enable it with `transport: { protocol: { legacy: true } }` |\n| `Module @swc/jest in the transform option was not found` from `frontmcp test` | Older `@frontmcp/testing` did not install the transformer the injected config uses | Upgrade — `@frontmcp/testing` depends on `@swc/jest` / `@swc/core`, and `frontmcp test` resolves the transformer through it |\n| `ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG` from a server started inside a spec | Older SDKs loaded the optional `vectoriadb` with `import()` at boot | Upgrade the SDK — `vectoriadb` is a regular dependency, imported without `import()`; no `--experimental-vm-modules` needed |\n\n## Examples\n\nEach reference has matching examples under [`examples/\u003creference>/`](./examples/):\n\n### `setup-testing`\n\n| Example | Level | Description |\n| ---------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`fixture-based-e2e-test`](./examples/setup-testing/fixture-based-e2e-test.md) | Advanced | Write E2E tests using the fixture API from `@frontmcp/testing` that manages server lifecycle automatically and uses MCP-specific custom matchers. |\n| [`jest-config-with-coverage`](./examples/setup-testing/jest-config-with-coverage.md) | Basic | Set up a Jest configuration file that enforces 95%+ coverage across all metrics for a FrontMCP library. |\n| [`unit-test-tool-resource-prompt`](./examples/setup-testing/unit-test-tool-resource-prompt.md) | Intermediate | Write unit tests for the three core MCP primitives, verifying that outputs match the expected MCP response shapes. |\n\n### `test-auth`\n\n| Example | Level | Description |\n| -------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------- |\n| [`oauth-flow-test`](./examples/test-auth/oauth-flow-test.md) | Advanced | Use `MockOAuthServer` to simulate an OAuth identity provider and test the authorization code flow. |\n| [`role-based-access-test`](./examples/test-auth/role-based-access-test.md) | Intermediate | Verify that tools enforce role-based access by testing admin and user tokens against protected endpoints. |\n| [`token-factory-test`](./examples/test-auth/token-factory-test.md) | Basic | Use `TestTokenFactory` to create tokens and verify authenticated and unauthenticated requests. |\n\n### `test-browser-build`\n\n| Example | Level | Description |\n| ----------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |\n| [`browser-bundle-validation`](./examples/test-browser-build/browser-bundle-validation.md) | Basic | Verify that the browser build produces a valid bundle without Node.js-only module references. |\n| [`playwright-browser-test`](./examples/test-browser-build/playwright-browser-test.md) | Advanced | Use Playwright to test a browser-based MCP client that loads and calls tools from an MCP server. |\n\n### `test-cli-binary`\n\n| Example | Level | Description |\n| ------------------------------------------------------------------------------ | ------------ | ------------------------------------------------------------------------------------------------------------------ |\n| [`binary-startup-test`](./examples/test-cli-binary/binary-startup-test.md) | Basic | Verify that a compiled CLI binary starts correctly and responds to health checks. |\n| [`js-bundle-import-test`](./examples/test-cli-binary/js-bundle-import-test.md) | Intermediate | Verify that the compiled JS bundle can be imported and exports the expected modules after a `frontmcp build` step. |\n\n### `test-direct-client`\n\n| Example | Level | Description |\n| ----------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------- |\n| [`basic-create-test`](./examples/test-direct-client/basic-create-test.md) | Basic | Test tools in-memory without any HTTP overhead using the `create()` function from `@frontmcp/sdk`. |\n| [`openai-claude-format-test`](./examples/test-direct-client/openai-claude-format-test.md) | Intermediate | Verify that tools are returned in the correct format for OpenAI and Claude clients using `connectOpenAI` and `connectClaude`. |\n\n### `test-e2e-handler`\n\n| Example | Level | Description |\n| --------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------- |\n| [`basic-e2e-test`](./examples/test-e2e-handler/basic-e2e-test.md) | Basic | Set up a basic E2E test that starts a server, connects a client, and verifies tools are listed. |\n| [`manual-client-with-transport`](./examples/test-e2e-handler/manual-client-with-transport.md) | Advanced | Use `McpTestClient.create()` with explicit transport settings for fine-grained control over E2E tests. |\n| [`tool-call-and-error-e2e`](./examples/test-e2e-handler/tool-call-and-error-e2e.md) | Intermediate | Test successful tool calls and verify that invalid inputs produce proper error responses over the full MCP protocol. |\n\n### `test-tool-unit`\n\n| Example | Level | Description |\n| ----------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------- |\n| [`basic-tool-test`](./examples/test-tool-unit/basic-tool-test.md) | Basic | Test a simple tool's `execute()` method with mock context and verify the output. |\n| [`schema-validation-test`](./examples/test-tool-unit/schema-validation-test.md) | Intermediate | Validate that a tool's Zod input schema rejects invalid data before `execute()` is called. |\n| [`tool-error-handling-test`](./examples/test-tool-unit/tool-error-handling-test.md) | Advanced | Test that a tool throws the correct MCP error classes with proper error codes and JSON-RPC error shapes. |\n\n## Accessing This Skill\n\nSkills are distributed as plain SKILL.md files plus a sibling `references/`\nand `examples/` tree, so consumers can pick whichever access mode fits:\n\n| Mode | How it works |\n| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Filesystem** | Read `libs/skills/catalog/frontmcp-testing/` directly from a clone of the catalog repo, or from a published `@frontmcp/skills` install. SKILL.md is the entry point. |\n| **`frontmcp` CLI** | `frontmcp skills list`, `frontmcp skills read frontmcp-testing`, `frontmcp skills read frontmcp-testing:references/\u003cfile>.md`, `frontmcp skills install frontmcp-testing` — no server required. |\n| **MCP `skill://`** | When a developer mounts this skill into their own FrontMCP server (`@FrontMcp({ skills: [...] })`), the SDK exposes it via SEP-2640 resources: `skill://frontmcp-testing/SKILL.md`, `skill://frontmcp-testing/references/{file}.md`, etc. The server’s `skill://index.json` returns the SEP-2640 discovery document for everything mounted on it. |\n\nThe catalog itself is **not** an MCP server. The `skill://` URIs only resolve\nwhen a server has been configured to host this skill.\n\n## Reference\n\n- [Testing Documentation](https://frontmcp.dev/reference/testing)\n- Related skills: `setup-testing`, `create-tool`, `create-resource`, `create-prompt`, `configure-auth`\n","licenseDocuments":[]}}
界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

frontmcp-testing

frontmcp-testing

【开发与工程】Use for anything about testing FrontMCP servers: writing or running unit, integration, and E2E tests and reaching the 95%+ coverage bar. Covers Jest setup and coverage gating; unit-testing a ToolContext execute() with mock context, inputs, and Zod schema validation; testing resources and prompts; in-memory testing via create() and connectOpenAI / con…

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

Aagentfront / frontmcpApache-2.0

技能说明

GitHub

name: frontmcp-testing description: 'Use for anything about testing FrontMCP servers: writing or running unit, integration, and E2E tests and reaching the 95%+ coverage bar. Covers Jest setup and coverage gating; unit-testing a ToolContext execute() with mock context, inputs, and Zod schema validation; testing resources and prompts; in-memory testing via create() and connectOpenAI / connectClaude (no HTTP); full MCP-protocol E2E over HTTP with McpTestClient and TestServer; authenticated tests with TestTokenFactory, MockOAuthServer, and role-based access; browser-bundle validation with Playwright; and CLI-binary / SEA startup tests. Triggers: write tests, run tests, add e2e tests, improve coverage, test a tool / resource / prompt, mock auth, jest config. The skill for ALL testing needs.' when_to_use: | Trigger when writing or running tests for a FrontMCP server: editing a .spec.ts / .e2e.spec.ts file or a jest config, setting up Jest or coverage gating, unit-testing a ToolContext execute(), writing MCP-protocol E2E tests with McpTestClient / TestServer, testing auth with TestTokenFactory / MockOAuthServer, validating a browser bundle with Playwright, or testing a CLI / SEA binary. paths: '**/.spec.ts, **/.e2e.spec.ts, **/jest.config., **/jest.e2e.config.' tags: [router, testing, jest, e2e, coverage, quality, guide] category: testing targets: [all] bundle: [recommended, full] priority: 10 visibility: both license: Apache-2.0 metadata: docs: https://frontmcp.dev/reference/testing

FrontMCP Testing Router

Entry point for testing FrontMCP applications. This skill helps you navigate testing strategies across component types and find the right patterns for unit, integration, and E2E tests.

When to Use This Skill

Must Use

  • Setting up testing infrastructure for a new FrontMCP project
  • Deciding how to test a specific component type (tool, resource, prompt, agent)
  • Planning a testing strategy that covers unit, E2E, and coverage requirements

Recommended

  • Looking up testing patterns for a component type you haven't tested before
  • Understanding the relationship between unit tests, E2E tests, and coverage thresholds
  • Troubleshooting test failures or coverage gaps

Skip When

  • You need detailed Jest configuration and test harness setup (go directly to setup-testing)
  • You need to build components, not test them (see frontmcp-development)
  • You need to deploy, not test (see frontmcp-deployment)

Decision: Use this skill for testing strategy and routing. Open the setup-testing reference under references/ for hands-on Jest configuration and test writing.

Prerequisites

  • A FrontMCP project with at least one component to test (see frontmcp-development).
  • Jest installed and configured — if not, start with setup-testing before opening any other testing skill.
  • The component itself implemented and exported; tests reach decorated classes through the SDK, not by importing internal builders.

Steps

This is a router skill. Follow this order to pick a testing approach, then move to the target reference under references/.

  1. Pick the test layer — unit (fastest, mock DI), integration (real DI scope), or E2E (real MCP client + server). Use the Testing Strategy table below.
  2. Pick the component flavour — tool / resource / prompt / agent / job — each has a distinct recipe.
  3. Pick the runtime concern — auth, browser/CLI build, direct vs streamable transport — and add the matching reference to your reading list.
  4. Open the target reference (e.g. references/test-tool-unit.md, references/test-e2e-handler.md, references/test-auth.md) and follow its Steps section.
  5. Enforce coverage — confirm the project's 95%+ thresholds are wired into Jest before merging (see references/setup-testing.md).

Scenario Routing Table

ScenarioReference / SectionDescription
Set up Jest, coverage, and test harnesssetup-testingFull Jest config, test utilities, and coverage thresholds
Write unit tests for a tooltest-tool-unitMock DI, validate input/output, test error paths
Write unit tests for a resourcesetup-testing (Unit Testing)Test URI resolution, template params, read results
Write unit tests for a promptsetup-testing (Unit Testing)Test argument handling, message generation
Write E2E protocol-level testssetup-testing (E2E Testing)Real MCP client/server, full protocol flow
Test authenticated endpointstest-authE2E with OAuth tokens, session validation, role-based access
Test deployment buildssetup-testing + deploy-to-*Smoke tests against built output
Test browser buildstest-browser-buildSmoke-test a frontmcp build --target browser bundle (import the bundle, optional Playwright suite)
Test CLI binary buildstest-cli-binarySpawn-and-curl smoke tests for frontmcp build --target cli artifacts
Test with the direct API clienttest-direct-clientIn-memory testing via create(), connectOpenAI(), connectClaude() (no HTTP)
Write E2E test handler patternstest-e2e-handlerManual McpTestClient + TestServer E2E patterns (alternative to fixture API)
Unit test individual toolstest-tool-unitUnit testing individual ToolContext subclasses with a mock context

Testing Strategy by Component Type

ComponentUnit Test FocusE2E Test FocusKey Assertions
ToolInput validation, execute logic, error paths, DI mockingtools/call via MCP clientOutput matches schema, errors return MCP codes
ResourceURI resolution, read content, template param handlingresources/read via MCP clientContent type correct, URI patterns resolve
PromptArgument validation, message generation, multi-turnprompts/get via MCP clientMessages match expected structure
AgentLLM config, tool selection, handoff logicAgent loop via MCP clientTools called in order, result synthesized
ProviderLifecycle hooks, factory output, singleton behaviorIndirectly via tool/resource testsInstance reuse, cleanup on scope disposal
JobProgress tracking, retry logic, attempt countingJob execution via test harnessProgress events emitted, retries respected
WorkflowStep dependencies, conditions, input mapping functionsWorkflow run via test harnessSteps execute in order, conditions evaluated, continueOnError respected
SkillInstruction loading (inline/file/url), tool validationSkill discovery via MCP/HTTPInstructions resolve, tool refs validated per toolValidation mode
PluginContext extensions, provider registration, hook firingIndirectly via tool testsExtensions available on this, hooks fire at correct stages

Cross-Cutting Testing Patterns

PatternRule
File namingAlways .spec.ts (not .test.ts); E2E uses .e2e.spec.ts
File organizationSplit E2E tests by app/feature: e2e/calc.e2e.spec.ts, e2e/ecommerce.e2e.spec.ts. Never put all tests in a single server.e2e.spec.ts
Environmentfrontmcp test loads .env / .env.local into the Jest child, same precedence as dev (real environment wins over the files, config env.shared + env.test underneath). --no-env skips it
Test runnerStandalone projects: use frontmcp test (auto-generates Jest/SWC config; discovers src/**/*.spec.ts(x), __tests__/**/*.spec.ts(x), and e2e/**/*.e2e.spec.ts(x); transforms both .ts and .tsx with the automatic JSX runtime; transpiles ESM-only deps such as jose, @noble/hashes and @noble/ciphers (CodeCall) under npm, yarn AND pnpm's node_modules/.pnpm/ store — add your own via test.esmPackages in frontmcp.config.ts; does not force NODE_OPTIONS=--experimental-vm-modules (it would bypass the ESM transforms; scaffolded projects use Jest 30); delegates to a user-provided jest.config.{ts,js,mjs,cjs,json} if present, which drops the injected config unless it starts from preset: '@frontmcp/testing', which carries the same transform, discovery, timeout and ESM transforms). Nx monorepos: use nx test <lib> (resolves the project's jest.config.ts). Never invoke jest --config ... directly
Coverage threshold95%+ across statements, branches, functions, lines
Test descriptionsPlain English, no prefixes like "PT-001"; describe behavior not implementation
MockingMock providers via DI token replacement, never mock the framework
httpMock scopehttpMock intercepts HTTP in the test process only, NOT in the MCP server subprocess. Do not use httpMock to intercept server-to-API calls — those happen in the child process. Use httpMock for verifying client-to-server request shapes or mocking external APIs called from the test itself
Error testingAssert instanceof specific error class AND MCP error code
AsyncAlways await async operations; use expect(...).rejects.toThrow() for async errors

Common Patterns

PatternCorrectIncorrectWhy
Test file locationfetch-weather.tool.spec.ts next to source__tests__/fetch-weather.test.tsCo-location with .spec.ts extension matches FrontMCP conventions
DI mockingReplace token with mock via scope.register(TOKEN, mockImpl)jest.mock('../provider') module mockDI mocking is cleaner, type-safe, and tests the real integration path
Error assertionsexpect(err).toBeInstanceOf(ResourceNotFoundError)expect(err.message).toContain('not found')Class checks are stable; message strings are fragile
E2E transportUse @frontmcp/testing MCP client with real serverHTTP requests with fetchThe test client handles protocol details (session, framing)
Coverage gapsInvestigate uncovered branches, add targeted testsAdd istanbul ignore commentsCoverage gaps often hide real bugs; ignoring them defeats the purpose

Verification Checklist

Infrastructure

  • Jest configured with @frontmcp/testing preset
  • Coverage thresholds set to 95% in jest.config
  • Test files use .spec.ts extension throughout

Unit Tests

  • Each tool has unit tests covering happy path, validation errors, and DI failures
  • Each resource has unit tests covering URI resolution and read content
  • Provider lifecycle (init, dispose) tested where applicable

E2E Tests

  • At least one E2E test exercises full MCP protocol flow (connect, list, call, disconnect)
  • Authenticated E2E tests use proper test tokens (not mocked auth)
  • E2E tests clean up state after execution

CI Integration

  • Tests run in CI pipeline on every PR
  • Coverage report published and enforced
  • Failing tests block merge

Troubleshooting

ProblemCauseSolution
Jest not finding test filesWrong file extension (.test.ts instead of .spec.ts)Rename to .spec.ts; check testMatch in jest.config
SyntaxError: Unexpected token 'export'An ESM-only dependency is being ignored instead of transpiledAdd it to test.esmPackages in frontmcp.config.ts. With a hand-written jest.config.ts, start from preset: '@frontmcp/testing' or use the pnpm-safe transformIgnorePatterns in setup-testing AND make sure transform matches .js (^.+\.[tj]sx?$ + allowJs) — un-ignoring a file does nothing if no transform matches it
Coverage below 95%Untested error paths or conditional branchesRun frontmcp test --coverage and inspect uncovered lines in the report
E2E test timeoutServer startup too slow or port conflictIncrease Jest timeout; use random port allocation
DI resolution fails in testsProvider not registered in test scopeRegister mock providers before creating the test context
Istanbul shows 0% on async methodsTypeScript source-map mismatch with IstanbulKnown issue with some TS compilation settings; verify coverage with actual test output
Specs see no .env valuesAn older CLI did not load .env for frontmcp test, only for devUpgrade the CLI — frontmcp test now loads .env / .env.local with the same precedence as dev (real environment wins, so CI secrets still override). Pass --no-env for a hermetic run
Invalid first argument, true at collection timetest.skip(condition, reason) reached Jest's skip(name, fn)Upgrade the CLI — the Playwright signature is supported: test.skip(!hasCredentials, 'credentials not set') skips every test registered after it in the enclosing block
test.use() in one describe leaks into another, or two files fight over a portOlder @frontmcp/testing kept one global config and per-process portsUpgrade — test.use() is scoped per describe and ports are locked across Jest workers; use port: 0
Every spec fails with HTTP 404 after setting http.entryPathThe test client always connected to the server rootUpgrade the CLI — the client now follows the entryPaths a 404 reports, and test.use({ entryPath: '/mcp' }) sets it explicitly
test.beforeEach(async ({ mcp }) => …) times out waiting for doneOlder @frontmcp/testing handed the hook to Jest, which read the parameter as doneUpgrade — hooks that take a parameter now receive the test's fixtures (same mcp as the test); beforeAll / afterAll never get fixtures
test.use({ transport: 'sse' }) throws "SSE transport not yet implemented"Older @frontmcp/testing had no legacy SSE clientUpgrade — 'sse' is the legacy HTTP+SSE transport; the server must enable it with transport: { protocol: { legacy: true } }
Module @swc/jest in the transform option was not found from frontmcp testOlder @frontmcp/testing did not install the transformer the injected config usesUpgrade — @frontmcp/testing depends on @swc/jest / @swc/core, and frontmcp test resolves the transformer through it
ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG from a server started inside a specOlder SDKs loaded the optional vectoriadb with import() at bootUpgrade the SDK — vectoriadb is a regular dependency, imported without import(); no --experimental-vm-modules needed

Examples

Each reference has matching examples under examples/<reference>/:

setup-testing

ExampleLevelDescription
fixture-based-e2e-testAdvancedWrite E2E tests using the fixture API from @frontmcp/testing that manages server lifecycle automatically and uses MCP-specific custom matchers.
jest-config-with-coverageBasicSet up a Jest configuration file that enforces 95%+ coverage across all metrics for a FrontMCP library.
unit-test-tool-resource-promptIntermediateWrite unit tests for the three core MCP primitives, verifying that outputs match the expected MCP response shapes.

test-auth

ExampleLevelDescription
oauth-flow-testAdvancedUse MockOAuthServer to simulate an OAuth identity provider and test the authorization code flow.
role-based-access-testIntermediateVerify that tools enforce role-based access by testing admin and user tokens against protected endpoints.
token-factory-testBasicUse TestTokenFactory to create tokens and verify authenticated and unauthenticated requests.

test-browser-build

ExampleLevelDescription
browser-bundle-validationBasicVerify that the browser build produces a valid bundle without Node.js-only module references.
playwright-browser-testAdvancedUse Playwright to test a browser-based MCP client that loads and calls tools from an MCP server.

test-cli-binary

ExampleLevelDescription
binary-startup-testBasicVerify that a compiled CLI binary starts correctly and responds to health checks.
js-bundle-import-testIntermediateVerify that the compiled JS bundle can be imported and exports the expected modules after a frontmcp build step.

test-direct-client

ExampleLevelDescription
basic-create-testBasicTest tools in-memory without any HTTP overhead using the create() function from @frontmcp/sdk.
openai-claude-format-testIntermediateVerify that tools are returned in the correct format for OpenAI and Claude clients using connectOpenAI and connectClaude.

test-e2e-handler

ExampleLevelDescription
basic-e2e-testBasicSet up a basic E2E test that starts a server, connects a client, and verifies tools are listed.
manual-client-with-transportAdvancedUse McpTestClient.create() with explicit transport settings for fine-grained control over E2E tests.
tool-call-and-error-e2eIntermediateTest successful tool calls and verify that invalid inputs produce proper error responses over the full MCP protocol.

test-tool-unit

ExampleLevelDescription
basic-tool-testBasicTest a simple tool's execute() method with mock context and verify the output.
schema-validation-testIntermediateValidate that a tool's Zod input schema rejects invalid data before execute() is called.
tool-error-handling-testAdvancedTest that a tool throws the correct MCP error classes with proper error codes and JSON-RPC error shapes.

Accessing This Skill

Skills are distributed as plain SKILL.md files plus a sibling references/ and examples/ tree, so consumers can pick whichever access mode fits:

ModeHow it works
FilesystemRead libs/skills/catalog/frontmcp-testing/ directly from a clone of the catalog repo, or from a published @frontmcp/skills install. SKILL.md is the entry point.
frontmcp CLIfrontmcp skills list, frontmcp skills read frontmcp-testing, frontmcp skills read frontmcp-testing:references/<file>.md, frontmcp skills install frontmcp-testing — no server required.
MCP skill://When a developer mounts this skill into their own FrontMCP server (@FrontMcp({ skills: [...] })), the SDK exposes it via SEP-2640 resources: skill://frontmcp-testing/SKILL.md, skill://frontmcp-testing/references/{file}.md, etc. The server’s skill://index.json returns the SEP-2640 discovery document for everything mounted on it.

The catalog itself is not an MCP server. The skill:// URIs only resolve when a server has been configured to host this skill.

Reference

  • Testing Documentation
  • Related skills: setup-testing, create-tool, create-resource, create-prompt, configure-auth
我的收藏