build-mcp-use-server
Build MCP Use Server
Use this skill for server-side mcp-use work. It covers building new MCP servers, extending existing ones, and tightening an existing server against mcp-use conventions. If the user's main task is a full widget or MCP App UI, use build-mcp-use-apps-widgets instead.
Core rules:
- Import server APIs from
mcp-use/server. The one common exception isLogger, which comes frommcp-use. - Declare
zodin the project's own dependencies. Do not assumemcp-useprovides it. - Use
mcp-useHTTP or serverless patterns. Do not hand-wire raw SDK transports. - Work in the actual package, fixture, or subdirectory you will change. If the user named a monorepo package or fixture path, scan that path directly.
- Never claim the server is scaffolded, installed, or runnable when the environment is read-only, notes-only, or missing prerequisites you cannot add in this run.
Workflow
1. Lock the target path and execution mode
Start by identifying the concrete path you will inspect and edit.
- If the user named a fixture, package, or subdirectory, use that path instead of the repo root.
- Detect both project state and execution limits before choosing an implementation path:
- Is there already an
mcp-useserver here? - Is this an implementation-capable run or a plan-only run?
- Is there already an
Treat the run as plan-only when any of these are true:
- the environment is read-only or notes-only
- package installation is blocked
- required prerequisites are missing and you cannot add them in this run
- the user asked for analysis or a concrete implementation plan rather than code changes
For plan-only runs, keep gathering enough context to produce an exact implementation plan. Do not fabricate edits, installs, or validation results.
2. Scan what already exists
Inspect the target path for:
package.jsonwithmcp-use,zod, or@mcp-use/cli- imports from
mcp-use/server new MCPServer(...)- registered tools, resources, prompts, or widget responses
- existing host entry files such as
index.ts,src/index.ts,src/server.ts, orsrc/mcp-server.ts - deployment/runtime clues such as
.mcp-use/, Docker, edge-function folders, auth config, env files, or existing health routes
Summarize:
- target path
- existing server vs no server
- implementation-capable vs plan-only
- likely server shape
- chosen entry file
3. Choose the right branch
Branch A — Existing mcp-use server
Do not rebuild from scratch. Audit and improve the live implementation yourself.
Cover these areas in order:
- tools and schemas
- names, descriptions,
.describe(), specificity, annotations, response helpers
- names, descriptions,
- server configuration and transport
MCPServerconfig, CORS,allowedOrigins, transport mode, middleware,baseUrl, env handling
- resources, prompts, notifications, sampling, elicitation, advanced features
- whether the server exposes the right primitives and guards client capabilities correctly
- production readiness
- error handling, logging, session strategy, shutdown, testing coverage, deployment shape
Then either:
- implement the highest-value fixes, or
- if the run is plan-only, produce a prioritized change plan with exact files, commands, and validation steps
Branch B — No mcp-use server, but the repo gives enough context
Infer the server from the existing code or spec.
Common signals:
- REST or Hono/Express/Fastify endpoints that should become MCP tools
- CLI commands that map naturally to tools
- data sources that should become resources
- a README, issue, or fixture that clearly defines the behavior
Choose the entrypoint deliberately:
- scaffolded
create-mcp-use-appproject: keep rootindex.ts - brand-new manual server: default to
src/server.ts - existing app already using
src/index.tsor another host entry: keep the host entry and addsrc/mcp-server.ts
Use the canonical setup and example sources before writing code:
references/guides/quick-start.mdreferences/examples/project-templates.mdreferences/examples/server-recipes.md
If the requested server is small and generic, start from the smallest matching example rather than inventing a new structure. The minimal calculator server in references/guides/quick-start.md is the default tiny-tool recipe.
Branch C — No usable context and the request is underspecified
Ask only the missing questions needed to proceed. Skip anything the user or repo already answered.
Prioritize:
- what data or service the server exposes
- transport/runtime target
- auth requirements
- tools vs resources vs prompts
- deployment target
- whether sampling, elicitation, or widgets are required
Ask one question at a time unless the user clearly wants a batch questionnaire.
4. Preflight setup before implementation
Use references/guides/quick-start.md as the canonical setup matrix.
Make these prerequisites explicit instead of assuming them:
- Node 18+ is available, with Node 22 LTS preferred when matching current examples
package.jsonuses"type": "module"mcp-useandzodare installed in dependencies@mcp-use/cliis present for CLI/HMR workflows unless the scaffold already included it- the chosen entry file matches the project type
If prerequisites are missing and you cannot add them in this run, switch to plan-only output.
5. Build or extend the server
Default sequence:
- choose the entry file and runtime shape
- create or refine
MCPServerconfig - register tools with precise Zod schemas
- add resources or prompts only when they genuinely improve the interface
- add auth, session storage, notifications, sampling, elicitation, proxying, or widgets only when the use case requires them
- add health routes, deliberate logging, and graceful shutdown for HTTP servers
6. Validate honestly
For implementation-capable runs, validate with the smallest relevant set:
mcp-use devand/ormcp-use start- MCP Inspector
- curl initialize -> list -> call flow over
/mcp - type generation or typecheck
- build or deploy preflight when relevant
For plan-only runs, provide:
- exact entry file(s)
- exact install commands
- exact scripts or config changes
- exact tools/resources/prompts to add
- exact validation commands to run later
Decision rules
- Prefer improving an existing server over replacing it.
- Keep the host app's entrypoint when adding MCP to an existing app; use
src/mcp-server.tsunless there is a strong reason not to. - Use
text(),object(),error(),mix(),widget(), and the other helpers instead of hand-built MCP payloads. - Default to a concise, complete
contentresponse for broad conversational compatibility. AddstructuredContentonly when the tool has anoutputSchema, typed/programmatic consumers, Code Mode, widget props, or another real downstream parser requirement. - If a tool returns both
contentandstructuredContent, keep them semantically equivalent and put every essential result in both surfaces. MCP hosts diverge: some prefercontent, some preferstructuredContent, some expose both, and some drop one. - Use
_metaonly for private, large, or UI-only data. TreatstructuredContentas potentially model-visible, including for ChatGPT/OpenAI Apps. - Use
error()for expected failures andthrowfor truly unexpected failures. - Treat notifications as stateful-only unless you have explicitly verified the transport model supports them.
- Guard
ctx.elicit()withctx.client.can("elicitation"). - Guard
ctx.sample()withctx.client.can("sampling"). - Suggest
build-mcp-use-apps-widgetswhen the user's real problem is a client-side MCP App or widget UI, not the server.
Guardrails
- Never import server primitives from
@modelcontextprotocol/sdkdirectly. - Never omit
zodfrom the project's own dependencies. - Never use
z.any()orz.unknown()when a concrete schema is possible. - Never leave schema fields undocumented; use
.describe()on every field the model must fill. - Never fall back to a repo-wide scan if the user named a narrower target path.
- Never claim success in a blocked environment.
- Never put secrets in source or logs.
- Never skip
allowedOriginsand CORS decisions for public HTTP servers. - Never put the primary answer only in one result surface when returning both
contentandstructuredContent; mirror the essential fields so content-first and structured-first clients see the same answer.
Output contract
Unless the user wants another format, report work in this order:
- target path and scan summary
- chosen branch and entrypoint decision
- implementation or exact plan
- validation results or explicit blocker
- key reference files used
Reference routing
Use the smallest relevant set.
Start here
references/guides/quick-start.md- canonical entrypoint, dependency, and script matrix
- minimal calculator server
references/examples/project-templates.md- full scaffold, manual, and existing-app layouts
references/examples/server-recipes.md- copyable working server patterns
Core server design
references/guides/tools-and-schemas.mdreferences/guides/response-helpers.mdreferences/guides/resources-and-prompts.mdreferences/guides/server-configuration.mdreferences/guides/transports.mdreferences/guides/session-management.md
Advanced capabilities
references/guides/authentication.mdreferences/guides/elicitation-and-sampling.mdreferences/guides/notifications-and-subscriptions.mdreferences/guides/advanced-features.mdreferences/guides/widgets-and-ui.md
Build, test, and ship
references/guides/cli-reference.mdreferences/guides/testing-and-debugging.mdreferences/patterns/production-patterns.mdreferences/patterns/deployment.mdreferences/patterns/anti-patterns.mdreferences/troubleshooting/common-errors.md
More from yigitkonur/skills-by-yigitkonur
run-research
>-
37run-agent-browser
Use skill if you are driving the agent-browser CLI for browser navigation, DOM-grounded interaction, session/tab management, screenshots, data extraction, or repeatable web app workflows.
33build-skills
Use skill if you are creating or substantially revising a Claude skill and need workspace-first evidence, remote comparison, and repo-fit synthesis before writing SKILL.md.
32publish-npm-package
Use skill if you are automating npm publishing via GitHub Actions and need auth, versioning, provenance, or workflow-template choices.
30develop-typescript
>-
29init-agent-config
Use skill if you are creating, auditing, or migrating AGENTS.md-first repo instructions, REVIEW.md standards, folder-scoped guidance, and companion agent entrypoints for multi-agent coding workflows.
29