A Model Context Protocol (MCP) server implementation in Node.js using TypeScript. This server provides tools for AI models to interact with external systems, including a powerful file search capability.
- π MCP Server: Implements the Model Context Protocol for AI model integration
- π File Search Tool: Search for keywords within text files with line number results
- π§ Question Tool: A tool for asking freeform questions to a chatbot service
- π οΈ BaseTool Abstraction: A simple abstraction for creating new tools with Zod-based schema validation
- π HTTP & STDIO Transport: Supports both HTTP and STDIO transport modes for the MCP server
- π TypeScript: Full TypeScript support with strict type checking
- π― ESLint + Prettier: Code quality and formatting tools
- π¦ Modern Node.js: ES2020+ features and modern JavaScript
- Node.js 18+
- npm or yarn
-
Clone and navigate to the project:
cd chatbot-mcp -
Install dependencies:
npm install
-
Set up environment variables:
cp env.example .env # Edit .env with your configuration
Run the server with hot reloading:
npm run devBuild the TypeScript code:
npm run buildRun the compiled JavaScript:
npm startTest your tools using the MCP Inspector:
npx @modelcontextprotocol/inspector dist/index.jsLint the code:
npm run lintFix linting issues:
npm run lint:fixFormat code:
npm run formatchatbot-mcp/
βββ src/
β βββ index.ts # Main entry point
β βββ server.ts # MCP server setup
β βββ tools/
β β βββ FileSearchTool.ts # File search tool implementation
β β
β βββ utils/
β βββ BaseTool.ts # Base class for creating tools
β βββ toolRegistry.ts # Utility to register all tools
βββ sample.txt # Sample file for testing file search
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
βββ .env.example # Environment variables template
βββ README.md # This file
Searches for a specified keyword within a file and returns matching lines with line numbers.
Input Schema:
{
filepath: string, // Path to the file to search
keyword: string, // Keyword to search for
caseSensitive?: boolean // Whether search is case-sensitive (default: false)
}Example Usage:
{
"filepath": "sample.txt",
"keyword": "MCP",
"caseSensitive": false
}Example Output:
Found 4 match(es) for keyword "MCP" in file: sample.txt
Line 1: Welcome to the MCP Server Documentation
Line 3: The Model Context Protocol enables seamless integration...
Line 5: MCP servers provide powerful capabilities...
Line 10: MCP makes it easy to build tool-enhanced AI applications.
Features:
- Case-insensitive search by default
- Returns line numbers with matching content
- Handles file not found errors gracefully
- Supports both absolute and relative file paths
POST /mcp- The primary endpoint for MCP requests when in HTTP modeGET /- A simple message indicating the server is running
Environment variables (set in .env file):
PORT- The port for the MCP server to listen on (default:5001)TRANSPORT_MODE- The transport mode for the server, eitherhttporstdio(default:http)CHAT_SERVER_URL- The URL for the external chat service used by thequestionTool
- Create a new tool file in
src/tools/ - Extend the
BaseToolclass - Define the input schema using Zod
- Implement the
executemethod - Register the tool in
src/utils/toolRegistry.ts
// src/tools/myNewTool.ts
import { BaseTool } from '../utils/BaseTool';
import { z } from 'zod';
export class MyNewTool extends BaseTool {
constructor() {
super({
name: 'my_new_tool',
title: 'My New Tool',
description: 'A description for the new tool',
inputSchema: {
parameter1: z.string().describe('Description for parameter 1'),
parameter2: z.number().optional().describe('Optional parameter')
}
});
}
async execute(input: any): Promise<any> {
const { parameter1, parameter2 } = input;
// Your tool's logic here
return { success: true, result: `Received ${parameter1}` };
}
}The File Search Tool demonstrates:
- File system operations using Node.js
fsmodule - Error handling for missing files
- String manipulation and search algorithms
- Case-sensitive and case-insensitive search options
- Formatted output with line numbers
-
Create a test file (
sample.txt):Welcome to the MCP Server Documentation This is a sample file for testing. The Model Context Protocol enables seamless integration. You can search for any keyword in this file. MCP servers provide powerful capabilities. -
Run the MCP Inspector:
npx @modelcontextprotocol/inspector dist/index.js
-
Test with sample input:
- filepath:
sample.txtor full path to the file - keyword:
MCP - caseSensitive:
false
- filepath:
-
Verify the output shows all matching lines with line numbers
This server implements the Model Context Protocol, allowing AI models to:
- Discover available tools
- Call tools with structured inputs
- Receive structured outputs
- Handle errors gracefully
The server can be configured to use either stdio or http transport, making it flexible for different MCP client implementations.
- Port already in use: Change the
PORTvariable in your.envfile - TypeScript compilation errors: Run
npm run lintto see detailed errors - File not found: Use absolute paths or ensure relative paths are correct
- MCP connection issues: Ensure the server is running and transport mode is correct
The server provides detailed logging for debugging:
- MCP server initialization
- Tool execution and results
- File operations
- Error details with stack traces
- Code Review: Search for specific patterns or keywords in source code
- Log Analysis: Find error messages or specific events in log files
- Documentation: Locate specific information in text documents
- Configuration: Search for settings in configuration files
- Data Processing: Find specific entries in CSV or text data files
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and linting
- Submit a pull request
Author: Parthik Diyora
Date: November 2, 2025