- Explore MCP Servers
- elysia-mcp
Elysia Mcp
Overview
What is Elysia Mcp
elysia-mcp is an ElysiaJS plugin designed for implementing Model Context Protocol (MCP) servers with support for HTTP transport.
Use cases
Use cases for elysia-mcp include building interactive applications that require echo services, generating Git commit messages, conducting advanced code reviews, and automating project documentation.
How to use
To use elysia-mcp, install it via npm or bun, then integrate it into your Elysia application by setting up the MCP server and defining tools, resources, and prompts.
Key features
Key features include HTTP transport with Server-Sent Events (SSE), stateful session management, type safety with TypeScript and Zod validation, easy integration, comprehensive support tools, proper error handling for JSON-RPC 2.0, and full unit test coverage.
Where to use
elysia-mcp can be used in web applications, APIs, and services that require a structured communication protocol, particularly in scenarios involving real-time data exchange.
Content
Elysia MCP Plugin
⚠️ Under Development
A comprehensive ElysiaJS plugin for implementing
Model Context Protocol (MCP) servers
with HTTP transport support.
Features
- HTTP Transport: Full HTTP-based MCP transport with Streamable HTTP
- Session Management: Stateful session handling via headers
- Type-Safe: Built with TypeScript and Zod validation
- Easy Integration: Simple plugin architecture for Elysia apps
- Comprehensive Support: Tools, Resources, Prompts, and Logging
- Error Handling: Proper JSON-RPC 2.0 error responses
- Testing: Full unit test coverage with Bun test runner
Installation
bun add elysia-mcp
# or
npm install elysia-mcp
Starter Template
To quickly get started with a pre-configured Elysia MCP project, you can use our starter template:
# Create a new project from the starter template
bun create https://github.com/kerlos/elysia-mcp-starter my-mcp-project
# Navigate to the project
cd my-mcp-project
# Install dependencies
bun install
# Start development server
bun run dev
The elysia-mcp-starter template includes:
- Pre-configured Elysia setup with MCP plugin
- TypeScript configuration
- Development scripts
- Basic project structure
- Example MCP server implementation
Quick Start
import { Elysia } from 'elysia';
import { mcp } from 'elysia-mcp';
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { z } from 'zod';
const app = new Elysia()
.use(
mcp({
serverInfo: {
name: 'my-mcp-server',
version: '1.0.0',
},
capabilities: {
tools: {},
resources: {},
prompts: {},
logging: {},
},
setupServer: async (server: McpServer) => {
// Register your MCP tools, resources, and prompts here
server.tool(
'echo',
{
text: z.string().describe('Text to echo back'),
},
async (args) => {
return {
content: [{ type: 'text', text: `Echo: ${args.text}` }],
};
}
);
},
})
)
.listen(3000);
Usage
Running the Examples
Basic Example:
# Run the basic example server (port 3000)
bun run example
# Or with development mode (auto-restart)
bun run dev
Multiple Servers Example:
# Run the multiple MCP servers example (port 3000)
bun example:multi
This example demonstrates how to create multiple MCP plugins in a single Elysia application:
-
Math Operations Plugin (
/math
) - Basic arithmetic tools:add
- Add two numbersmultiply
- Multiply two numberspower
- Calculate base to the power of exponent
-
Text Utilities Plugin (
/text
) - Text processing tools:uppercase
- Convert text to uppercaseword_count
- Count words in textreverse
- Reverse text charactersreplace
- Replace text with global matching
Testing with MCP Inspector
-
Install MCP Inspector:
npx @modelcontextprotocol/inspector
-
Connect to your server:
- Basic Example:
http://localhost:3000/mcp
- Multiple Servers Example:
- Math Plugin:
http://localhost:3000/math
- Text Plugin:
http://localhost:3000/text
- Math Plugin:
- Basic Example:
Configuration Options
serverInfo
: Server informationcapabilities
: MCP capabilities to advertiseenableLogging
: Enable debug logging (default: false)setupServer
: Callback to register tools, resources, and prompts
Session Management
The plugin automatically handles session management via the Mcp-Session-Id
header. Each session maintains its own state and can be terminated cleanly.
Modular Handler Architecture
The plugin supports a modular handler architecture that allows you to create specialized endpoints for different MCP capabilities:
import {
mcp,
ToolsHandler,
ResourcesHandler,
PromptsHandler,
} from 'elysia-mcp';
const app = new Elysia().use(
mcp({
/* config */
})
);
API Reference
Tools
Register tools using the MCP Server instance:
server.tool(
'tool-name',
{
param: z.string().describe('Parameter description'),
},
async (args) => {
// Tool implementation
return {
content: [{ type: 'text', text: 'Tool result' }],
};
}
);
Resources
Register resources for file or data access:
server.resource('Resource Name', 'resource://uri', async () => {
return {
contents: [
{
uri: 'resource://uri',
mimeType: 'text/plain',
text: 'Resource content',
},
],
};
});
Prompts
Register reusable prompt templates following MCP best practices:
server.prompt(
'prompt-name',
'Prompt description',
{
param: z.string().describe('Parameter description'),
},
async (args) => {
return {
description: 'Generated prompt',
messages: [
{
role: 'user',
content: {
type: 'text',
text: `Generated prompt with ${args.param}`,
},
},
],
};
}
);
Testing
Run the comprehensive test suite:
bun test
License
MIT - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Related
Plugin Configuration
Plugin Options
interface MCPPluginOptions {
serverInfo?: {
name: string;
version: string;
};
capabilities?: ServerCapabilities;
enableLogging?: boolean;
setupServer?: (server: McpServer) => void | Promise<void>;
}
Architecture
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐ │ HTTP Client │───▶│ Elysia HTTP │───▶│ MCP Plugin │ │ │ │ Handler │ │ │ └─────────────────┘ └──────────────┘ └─────────────────┘ │ │ ┌─────────────────┐ │ McpServer │ │ (Singleton) │ └─────────────────┘