FastMCP Demo - TypeScript MCP Server
A demonstration project to understand the Model Context Protocol (MCP) using TypeScript. This project implements a basic MCP server with tools, resources, and prompts.
What is MCP?
The Model Context Protocol (MCP) is a standardized protocol that enables AI assistants to securely access external data sources and tools. It provides a way for AI models to:
- Tools: Execute functions and operations
- Resources: Access data and information
- Prompts: Use predefined prompt templates
Project Structure
fast-mcp/
├── src/
│ └── index.ts # Main MCP server implementation
├── dist/ # Compiled JavaScript (generated)
├── package.json # Project dependencies
├── tsconfig.json # TypeScript configuration
└── README.md # This file
Features
This demo server includes:
Tools
- hello: A simple greeting tool that welcomes users
- calculate: Performs basic arithmetic operations (add, subtract, multiply, divide)
Resources
- demo://example: A simple text resource
- demo://config: Server configuration in JSON format
Prompts
- greet_user: Generates a greeting message for a user
- explain_mcp: Provides an explanation of what MCP is
Setup
-
Install dependencies:
npm install -
Build the project:
npm run build -
Run the server:
npm startOr use the development mode with auto-reload:
npm run dev
How MCP Works
Server Initialization
The server is created with capabilities for tools, resources, and prompts:
const server = new Server(
{ name: "fast-mcp-demo", version: "0.1.0" },
{
capabilities: {
tools: {},
resources: {},
prompts: {},
},
}
);
Transport
This server uses stdio (standard input/output) transport, which means it communicates via stdin/stdout. This is the most common transport for MCP servers.
Request Handlers
Each capability requires request handlers:
ListToolsRequestSchema- Lists available toolsCallToolRequestSchema- Executes a toolListResourcesRequestSchema- Lists available resourcesReadResourceRequestSchema- Reads a resourceListPromptsRequestSchema- Lists available promptsGetPromptRequestSchema- Gets a prompt with arguments
Testing with MCP Clients
To test this server, you'll need an MCP client. Popular options include:
- Claude Desktop - Add the server to your MCP configuration
- MCP Inspector - A debugging tool for MCP servers
- Custom MCP Client - Build your own using the MCP SDK
Example Configuration (Claude Desktop)
Add to your Claude Desktop MCP settings:
{
"mcpServers": {
"fast-mcp-demo": {
"command": "node",
"args": ["/path/to/fast-mcp/dist/index.js"]
}
}
}
Learning Path
This project was built incrementally to understand MCP concepts:
- ✅ Initial Setup - TypeScript configuration and dependencies
- ✅ Basic Server - Simple server with hello tool
- ✅ Resources - Added resource reading capabilities
- ✅ Prompts - Added prompt templates
- ✅ Advanced Tools - Added calculate tool with error handling
Key Concepts
Tools
Tools are functions that the AI can call. They have:
- A name and description
- An input schema (JSON Schema)
- Execution logic that returns results
Resources
Resources are data sources that can be read. They have:
- A URI identifier
- A name and description
- A MIME type
- Content that can be retrieved
Prompts
Prompts are template messages that can be used to guide AI interactions. They have:
- A name and description
- Optional arguments
- Message templates
Next Steps
To extend this demo, consider:
- Adding file system resources
- Implementing authentication
- Adding more complex tools (API calls, database queries)
- Using different transports (SSE, HTTP)
- Adding logging and error handling middleware
- Implementing caching for resources
Resources
- MCP Specification
- MCP TypeScript SDK
- FastMCP (Python) - The Python equivalent
License
MIT
