FeathersMCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FeathersMCPHow do I create a custom hook in Feathers v6?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FeathersMCP
An MCP server that connects your AI assistant to the FeathersJS v6 documentation. Get accurate, source-linked answers about hooks, services, authentication, and more, directly in your IDE.
Why use FeathersMCP?
AI assistants answering from memory often mix up Feathers versions, invent APIs, or miss edge cases. FeathersMCP gives your assistant live access to the real v6 docs so answers come with a source_url you can verify.
Without FeathersMCP | With FeathersMCP |
Training-data guesses, risk of outdated APIs | Searches and returns actual v6 documentation pages |
No citations | Every answer includes a link to |
No community patterns | Optional community knowledge base (real-world tutorials) |
Related MCP server: Whoosh RAG MCP
Prerequisites
Requirement | Link |
Node.js (v18 LTS or later) | |
npm (bundled with Node) | |
An MCP-compatible AI client (see Installation) | (n/a) |
Supported clients: VS Code (with GitHub Copilot), Cursor, Claude Desktop, Zed, and any other MCP host.
Each client uses its own MCP config location. Follow the section for your client below (Step 1 shows the exact file or setting to edit).
Installation
The server command is the same everywhere; only the config file location and JSON shape depend on your MCP host. Open the section for the client you use.
VS Code (GitHub Copilot)
Step 1. Create .vscode/mcp.json inside your project folder:
{
"servers": {
"feathersjs": {
"type": "stdio",
"command": "npx",
"args": ["feathersjs-mcp@latest"]
}
}
}Step 2. Reload the window — open the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and run Developer: Reload Window.
Step 3. Open the Command Palette again, run MCP: List Servers, and confirm feathersjs appears in the list.
If it shows as Stopped, click it and select Start Server.
If VS Code prompts you to trust the server, click Allow. Without this the server will not run.
If it is listed but disabled, enable it from the same panel.
Step 4. Open GitHub Copilot Chat, switch to Agent mode, and ask:
What FeathersJS topics are covered in the official docs?
If the server is connected, the assistant should call a tool like get-menu or search-doc. If no tool call appears, check that the server is running in MCP: List Servers and that you are in Agent mode, not Ask or Edit mode.
Cursor
Step 1. Create the config file. Two options:
Project only:
.cursor/mcp.jsoninside your project folder (can be committed to git and shared with teammates)All projects:
~/.cursor/mcp.jsonin your home directory (local to your machine only)
If both files exist, the project-level file takes priority.
{
"mcpServers": {
"feathersjs": {
"command": "npx",
"args": ["feathersjs-mcp@latest"]
}
}
}Step 2. Reload the window — open the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and run Developer: Reload Window.
Step 3. Open Cursor Settings → Tools & MCP and confirm feathersjs appears with a green status indicator. If the toggle next to it is off, turn it on. Adding the config file alone is not enough — the server must be enabled in this panel.
Step 4. Open Cursor Chat in Agent mode and ask:
How do Feathers hooks work in v6?
If the server is active, the assistant should call search-doc and return a result with a source URL. If no tool is called, check that the server is toggled on in Settings → Tools & MCP and that you are in Agent mode, not Ask or Edit mode.
Claude Desktop
Step 1. Open the config file for your OS:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Step 2. Add the server entry (create the file if it does not exist):
{
"mcpServers": {
"feathersjs": {
"command": "npx",
"args": ["-y", "feathersjs-mcp@latest"]
}
}
}Step 3. Fully restart Claude Desktop — quit and reopen, do not just reload. The first run downloads the package automatically.
Step 4. Ask a test question:
What authentication strategies does Feathers v6 support?
If no tool is called, check Claude's MCP logs (Help → Open Logs Folder) for connection errors. See Claude Desktop MCP docs for more detail.
Zed
Step 1. Add the server to your Zed settings. Open Zed Settings (Cmd+,) and add a context_servers block:
{
"context_servers": {
"feathersjs": {
"command": {
"path": "npx",
"args": ["-y", "feathersjs-mcp@latest"]
}
}
}
}Alternatively, open the Agent Panel (Cmd+?), click the settings icon, and use Add Custom Server to register the same command.
Step 2. Check the status indicator next to the server name in the Agent Panel. A green dot means it is active. If it is grey or shows an error, verify npx is on your PATH by opening Zed from a terminal: zed .
Step 3. Note that Zed may ask you to approve tool calls before they run — this is expected. Confirm when prompted.
Step 4. Ask a test question in the Agent Panel:
What topics are covered in the official FeathersJS v6 docs?
If the server is connected, it should call get-menu or search-doc. Mentioning feathersjs by name in your prompt can help Zed route to the right server.
Other MCP hosts
Register the same command — npx with args ["-y", "feathersjs-mcp@latest"] — using your client's MCP config format. The MCP clients list links setup docs for each supported host.
Optional: pin the version locally
npm install feathersjs-mcpLocks the package in package.json so all contributors use the same release. Swap "npx" for "node" and point args at node_modules/feathersjs-mcp/build/index.js.
Agent skill (optional)
The skill file adds a workflow guide so your assistant searches docs and community before answering from memory.
# Install
npx feathersjs-mcp@latest install-skill
# Uninstall
rm -rf .agents/skills/feathersjs-mcpWorks with Cursor, Claude Code, Windsurf, Gemini CLI, and any tool that follows the agentskills.io standard. Re-run the install command to update it.
Prompts to try
These natural-language questions demonstrate what FeathersMCP is good at. Paste any of them into your AI chat after installation.
What you ask | Tool triggered |
|
|
|
|
|
|
|
|
You don't need to mention tool names. The server picks the right one based on your question.
Troubleshooting
Server not connecting / tools never appear Check the client-specific step for your MCP host above — most clients require you to manually enable or start the server after adding the config file. Also verify the config file is in the correct location for your client (see the table in Prerequisites).
macOS: spawn npx ENOENT
Open your project from a terminal (cursor . / code . / zed .) so the IDE inherits your shell PATH. Or install locally and use the full path to node (from which node):
{
"mcpServers": {
"feathersjs": {
"command": "/opt/homebrew/bin/node",
"args": ["node_modules/feathersjs-mcp/build/index.js"]
}
}
}Tools appear but no tool is called in chat Make sure you are in Agent mode — tools are not available in Ask or Edit mode. In Cursor, also verify the server toggle is on in Settings → Tools & MCP.
Available tools
Tool | Description |
| Full doc index (categories, paths, IDs) |
| Full-text search across 47 official v6 pages |
| Full page content and code examples (by id, path, or title) |
| Schema of the local docs database |
| Search community tutorials and patterns |
| Full community post by id |
| Generate a pre-filled GitHub issue to submit a community post |
Links
npm package: https://www.npmjs.com/package/feathersjs-mcp
GitHub repo: https://github.com/daffl/FeathersMCP
FeathersJS v6 docs: https://feathersjs.com / https://v6.feathersjs.com
MCP standard: https://modelcontextprotocol.io
Agent skills: https://agentskills.io
Repository documentation (optional — for people working in the repo)
If you only use FeathersMCP from npm (for example npx feathersjs-mcp in your MCP config), you do not need anything under docs/—the sections above are enough.
The docs/ folder supports transfer of ownership, onboarding new maintainers, and ongoing operations. Layout: docs/project/ (ownership transfer, setup, architecture) and docs/operations/ (CI/CD, releases, D1 — DevOps-style docs for maintainers).
Document | Who it is for |
Incoming maintainers — scope, limitations, operational ownership | |
Developers — clone, build, and verify from a clean machine | |
Developers — architecture and data flow | |
Maintainers — GitHub Actions | |
Maintainers — npm and skill release | |
Maintainers — D1 reset and schema |
Available Tools
7 toolsget-community-postA
Fetch the full content of a community contribution by id (from search-community results).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The community post ID from search-community results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It doesn't indicate whether the fetch is read-only (though 'Fetch' implies read), whether it returns error handling for missing IDs, rate limits, or format of the returned content. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, efficient sentence that front-loads the action and resource. No unnecessary words, though could be slightly more explicit about the return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter fetch tool, the description covers the essential purpose. However, with no annotations and no output schema, additional context such as response shape, error behavior, or authentication requirement would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's schema description already states it's the ID from search-community results. The description merely repeats 'by id' without adding format or other constraints. Baseline 3 per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch), resource (full content of a community contribution), and key modifier (by id). Distinguished from sibling search-community which is referenced as the source of the ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: after searching via search-community, use this tool to retrieve the full post. However, it doesn't explicitly state when NOT to use this tool or contrast with get-doc/get-menu/get-schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-docA
Fetch a full official FeathersJS doc page: returns complete page text plus all code examples. Look up by id, path, or title. Use after get-menu (paths/ids), after search-doc, or when the user gave an exact id/path/title. Prefer id or path over title.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The numeric document ID (from get-menu or search results). RECOMMENDED: Use this as the primary way to fetch documents after search-doc, as it uniquely identifies a document. | |
| path | No | The source_file path of the document (e.g. "api/hooks", "guides/basics/setup"). RECOMMENDED: Use this as an alternative to id; uniquely identifies a document. | |
| title | No | The exact title of the document to retrieve (e.g. "Hooks" or "Authentication"). WARNING: Multiple documents may share the same title. Avoid this when possible; prefer id or path instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden, and it does disclose the return shape (full page text plus all code examples). However, it says nothing about failure modes (unknown id/path), rate limits, or auth requirements, so key behavioral context is missing for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, each doing distinct work: what it returns, how to look it up, and when to call it. Front-loaded with the purpose and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description must describe returns – and it does (complete page text plus code examples). Sibling and sequencing relationships are covered. The only real gap is error/edge behavior when a lookup key does not resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 id, path, and title, including the warning that titles are non-unique. The description's lookup guidance (id/path/title, prefer id or path) largely restates that, adding little beyond the schema – baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fetch a full official FeathersJS doc page") plus the scope of what it returns ("complete page text plus all code examples"). The role is clearly differentiated from siblings like search-doc and get-menu, which are named as upstream steps rather than substitutes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates the triggering conditions: after get-menu (paths/ids), after search-doc, or when the user supplied an exact id/path/title. It also gives a selection rule among the tool's own inputs ("Prefer id or path over title"), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-schemaA
Get the database schema for FeathersJS documentation tables
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies a read-only operation (retrieving schema) but doesn't state permissions, rate limits, or output format. For a zero-parameter tool, the behavioral traits are minimal, so this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that is efficient and waste-free. It directly states the tool's purpose without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is sufficient to understand what it does. However, it could benefit from mentioning that it returns schema information for documentation tables, though that is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to document. Schema coverage is 100% by default. The description adds no parameter details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (database schema for FeathersJS documentation tables), which is clear. However, it doesn't distinguish itself from siblings like get-doc or get-menu, which also retrieve data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as search-doc or get-doc. The description implies it returns schema metadata, but no context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-communityA
Search real-world FeathersJS solutions from the community.
PRIMARY use cases:
Implementation, integrations, and architecture patterns
Debugging issues or unexpected behavior
Workarounds, fixes, and best practices not in docs
You MUST use this when:
The user asks how to implement or integrate something
The user reports something not working or asks why
The solution is not clearly in a single doc page
After calling:
Use
get-community-postif a result is relevantInclude at least one community insight in your answer
Returns: results with id for get-community-post.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query for community posts (e.g. 'authentication', 'react-native'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It states the return shape ('results with id for get-community-post') and an actionable post-call constraint ('Include at least one community insight in your answer'), but says nothing about result limits, pagination, or auth/scope requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then organized under scannable headers (PRIMARY use cases / MUST use when / After calling / Returns). Every bullet carries routing or workflow information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter search tool with no output schema, the description covers purpose, triggers, and what the results contain, and even specifies the next tool to call. Nothing an agent needs to invoke or sequence it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'query' parameter, so the schema already documents its type and purpose. The description adds example queries ('authentication', 'react-native'), but those duplicate the schema example, so this is the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search real-world FeathersJS solutions from the community.' It also implicitly scopes itself against siblings like search-doc and get-doc by targeting solutions 'not in docs,' so the agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'PRIMARY use cases' and a directive 'You MUST use this when' list three concrete triggering conditions, including negative-style guidance ('solution is not clearly in a single doc page') that routes the agent away from doc search. It also names get-community-post as the follow-up alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-docB
Search the FeathersJS documentation for relevant content. You can make multiple calls to this tool to refine your search. Call get-schema and get-menu first to craft better queries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 5) | |
| query | Yes | The search query to find in the documentation | |
| category | No | Optional category filter: api, guides, cookbook, or ecosystem | |
| query_type | No | Type of search query: 'keyword' for simple keyword search, 'sql' for raw SQL queries |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that iterative multi-call refinement is expected, but says nothing about result format, ranking, pagination, or what limit does behaviorally beyond the schema default. Some behavioral context is added, but a no-annotation tool should say more.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core purpose front-loaded and the operational tips following. Nothing is padded, though the prerequisite guidance could be tightened to make the tool's own scope clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must cover behavior on its own. It covers prerequisites and iteration adequately but omits return shape and result-size behavior, leaving a real gap for an agent deciding how to consume or paginate results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including the keyword/sql enum and category values) are already documented in the schema. The description adds no syntax, format, or example guidance beyond that, so the baseline 3 for schema-driven parameters is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and a specific resource (the FeathersJS documentation), so an agent immediately knows this is a retrieval tool over docs. It does not explicitly distinguish itself from close siblings like search-community or get-doc, relying on the resource noun alone to do that work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a useful prerequisite chain (call get-schema and get-menu first) and notes that repeated calls are expected to refine results. However, it never states when to prefer this over the sibling get-doc (exact retrieval) or search-community, and gives no exclusions, so the routing guidance is implied rather than explicit.
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.
7 tool updates
v1.0.16- First observed
get-community-post - First observed
get-doc - First observed
get-menu - First observed
get-schema - First observed
search-community - First observed
search-doc - First observed
share-knowledge
TDQS
Scored across 7 tools
Each tool has a distinct role: get-menu and get-schema provide structural context, search-doc and search-community handle discovery, get-doc and get-community-post retrieve full resources, and share-knowledge handles contribution submission. The doc vs. community split is consistent and clearly reflected in descriptions, so an agent can easily choose the right tool.
All tool names follow the same lowercase hyphenated verb-noun convention: get-doc, get-community-post, get-menu, get-schema, search-doc, search-community, share-knowledge. There are no mixed casing styles or inconsistent verb patterns.
Seven tools is well scoped for a documentation and community knowledge server. The set covers navigation, schema inspection, documentation search/retrieval, community search/retrieval, and contribution sharing without obvious redundancy.
The server covers the main lifecycle: orient with menu/schema, search docs and community, retrieve full items, and share knowledge. Minor gaps exist, such as no explicit listing or filtering of community posts by tag/author, but search largely compensates for those omissions.
Maintenance
Related MCP Connectors
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
An MCP server that gives your AI access to the source code and docs of all public github repos
An MCP server that integrates with Discord to provide AI-powered features.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to access up-to-date documentation for Python libraries like LangChain, LlamaIndex, and OpenAI through dynamic fetching from official sources.1MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides full-text search over documentation using Whoosh, enabling AI assistants to find up-to-date, authoritative answers.MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides tools for retrieving and processing documentation through vector search, enabling AI assistants to augment their responses with relevant documentation context.11 npmMIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that gives AI coding assistants access to up-to-date API documentation via RAG by crawling documentation sites, indexing them into a vector store, and enabling semantic queries.MIT