MCP Serverless

by tilfin

1 stars
323 downloads
Not rated
GitHub

About

Serverless implementation of the Model Context Protocol (MCP)

Details

Author
tilfin
GitHub stars
1
Downloads
323
Categories
Cloud Service

- Register and manage multiple tools with a single manager
- Call tools with or without a request context object
- Create in‑memory client‑server connections (no network needed)
- Extend tool calls with context for credential transmission
- Works with standard I/O transports (stdio client/server)

Install the package with npm (npm install @tilfin/mcp-serverless). Import ToolManager and createService from the package, create a tool manager, register tools (each with name, description, input schema, and a tool function), then create a service client and call client.listTools() or client.callTool(). Context (e.g., an API key) can be passed in the ctx property of the tool call arguments.

MCP Serverless

A serverless implementation for the Model Context Protocol (MCP) architecture that enables tool management through a clean interface.

Overview

This package provides a serverless implementation of the MCP server that allows you to:
- Register and manage tools
- Handle tool-related requests
- Create in-memory client-server connections
- Extend request with context to enable credential transmission from clients

Installation

npm install @tilfin/mcp-serverless

Usage

Tool Registration and create a client for service implements

import { createService, ToolManager } from '@tilfin/mcp-serverless';

// Create a tool manager
const toolManager = new ToolManager();

// Register tools
toolManager.registerTools([
{
name: 'calculator',
description: 'Performs basic arithmetic operations',
inputSchema: {
type: 'object',
properties: {
operation: { type: 'string' },
numbers: { type: 'array', items: { type: 'number' } }
},
required: ['operation', 'numbers']
},
toolFunction: async (params, ctx) => {
if (ctx.apiKey !== 'xyz') throw new Error('Invalid API Key');

let result;
if (params.operation === 'add') {
result = params.numbers.reduce((sum, n) => sum + n, 0);
}
return { result };
}
}
]);

// Create a serverless client
const client = createService(toolManager);

// List available tools
const toolsList = await client.listTools();

// Call a tool
try {
const result = await client.callTool({
name: 'calculator',
arguments: {
operation: 'add',
numbers: [1, 2, 3]
}
});
} catch (err) {
// raise Invalid API Key error
}

// Call a tool with context
const result = await client.callTool({
name: 'calculator',
arguments: {
operation: 'add',
numbers: [1, 2, 3]
},
ctx: { apiKey: 'xyz' }
});

API Reference

ToolManager class

Manages the registration and handling of tools.

Tool Interface

Tools must implement the following interface:

interface Tool {
  name: string;
  description: string;
  inputSchema: ToolInput;
  toolFunction: (args: CallToolRequestArguments, ctx: CallToolRequestContext) => Promise<CallToolResultContent>;
}

createServer(serverInfo, toolManager)

Creates an MCP server with the given tool manager.

createService(toolManager)

Creates an in-memory client-server setup for serverless operation.

Examples

Standard I/O Transport

The package includes examples for using the stdio transports for both client and server communication:

- StdioClientTransport: Allows clients to communicate with servers over standard input/output
- StdioServerTransport: Enables servers to handle requests through standard input/output

Check out the example implementation:
- Client: stdio_client.mjs
- Server: stdio_server.mjs

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.