Naveen Ayalla
This server allows you to explore and navigate a codebase using three tools:
search_code: Search for keywords, function names, or patterns across the codebase. Returns matching file paths, line numbers, and surrounding context. Supports limiting results (default: 20) and filtering by file type via glob patterns (e.g.,**/*.ts).list_files: List files matching a given glob pattern (e.g.,src/**/*.ts), making it easy to discover and enumerate relevant files.read_file: Read the full contents of any file by providing its path relative to the repository root.
Provides tools for querying commits, diffs, blame, and branches from a Git repository.
Enables natural language queries against MySQL databases, with read-only by default.
Allows indexing and querying Notion workspaces for documentation lookups.
Enables natural language queries against PostgreSQL databases, with read-only by default.
Enables natural language queries against SQLite databases, with read-only by default.
Allows browsing and calling API endpoints defined in any OpenAPI/Swagger specification.
π MCP Server Toolkit
| mcp-memory | npx mcp-memory | Persist and recall architecture decisions, patterns, constraints, and project context |
Build plug-and-play MCP servers for any dev workflow β code search, docs, databases, and more.
π§ Persistent project memory β Remember architecture decisions, patterns, constraints, and project conventions across AI coding sessions.
|
mcp-memory|npx mcp-memory| Persist and recall architecture decisions, patterns, constraints, and project context | Give any AI coding agent a direct line into your codebase, docs, or database β in under 60 seconds.
Quick Start Β· Servers Β· Build Your Own Β· Discord Β· Changelog

Why this exists
When you ask Claude Code "where do we handle Stripe webhooks?" it has two bad options:
Option A β Read every file in the repo. Slow, expensive, blows the context window on any real codebase.
Option B β Guess based on the first few files it sees. Wrong half the time.
MCP Server Toolkit gives agents a third option: ask the right tool directly. Semantic code search, live database queries, doc lookups, API introspection β all surfaced through the Model Context Protocol standard, so any MCP-compatible client can use them without any changes to your existing code.
Related MCP server: TypeScript Tools MCP
β¨ Features
π Semantic code search β Find the right function, file, or pattern across your entire repo in milliseconds. Powered by vector embeddings, no Elasticsearch required.
π Docs server β Give your agent instant access to any documentation site, local Markdown files, or Notion workspace.
ποΈ Database server β Natural language β SQL for PostgreSQL, MySQL, and SQLite. Read-only by default, writable with an explicit flag.
π API introspection server β Load any OpenAPI/Swagger spec and let your agent browse and call endpoints with type safety.
β‘ One-command setup β Every server ships as a standalone CLI.
npxandpipinstall paths included.π Zero-config secrets β Reads from your existing
.envfile or environment variables. Nothing new to learn.π§© Works everywhere β Claude Code, Cursor, Windsurf, Cline, VS Code Copilot, Codex CLI, Gemini CLI, and every other MCP-compatible client.
π οΈ Extensible β The
createServer()helper reduces a new tool to ~15 lines of TypeScript. Scaffold a custom server in 30 seconds.
π Quick Start
Requirements: Node.js 18+ or Python 3.10+
Option A β npx (no install)
npx mcp-server-toolkit@latest initThis runs the interactive setup wizard. Pick your servers, paste your credentials, and get a ready-to-paste config block for Claude Code / Cursor.
Option B β npm global install
npm install -g mcp-server-toolkit
mcp initOption C β pip (Python environments)
pip install mcp-server-toolkit
mcp initAdd to Claude Code
After mcp init, copy the generated block into your .claude/mcp.json:
{
"servers": {
"code-search": {
"command": "mcp-code-search",
"args": ["--root", "."],
"env": { "OPENAI_API_KEY": "${OPENAI_API_KEY}" }
},
"database": {
"command": "mcp-database",
"args": ["--read-only"],
"env": { "DATABASE_URL": "${DATABASE_URL}" }
},
"docs": {
"command": "mcp-docs",
"args": ["--source", "./docs"]
}
}
}That's it. Restart Claude Code and your agent now has full access to all three.
π¦ Included Servers
Server | Install | What it does |
|
| Semantic + keyword search across your codebase |
|
| Natural language queries for Postgres, MySQL, SQLite |
|
| Index and query local Markdown, Notion, or any URL |
|
| Browse and call endpoints from any OpenAPI spec |
|
| Query commits, diffs, blame, and branches |
|
| Sandboxed shell execution with allowlist controls |
All servers are independently installable β use one or all of them.
π οΈ Usage Example
Once installed, your AI agent can use natural language to interact with your entire dev environment:
You: "Find all places where we validate user input before inserting into the DB"
Agent uses mcp-code-search β
Found 7 matches in: auth/validators.ts, api/users.ts, api/orders.ts...
You: "How many users signed up in the last 7 days?"
Agent uses mcp-database β
SELECT count(*) FROM users WHERE created_at > now() - interval '7 days';
β 1,432 new users
You: "What does our docs say about rate limiting?"
Agent uses mcp-docs β
Found in docs/api/rate-limits.md: "All endpoints are limited to 100 req/min per API key..."No copy-pasting. No context switching. The agent just knows.
π§ Build Your Own Server
Scaffold a new server in 30 seconds:
mcp new my-server --template typescriptThis generates:
my-server/
βββ src/
β βββ index.ts # Entry point β register your tools here
β βββ tools/
β βββ example.ts # Your first tool
βββ package.json
βββ README.mdA minimal tool looks like this:
import { createServer, tool, z } from 'mcp-server-toolkit';
const server = createServer({ name: 'my-server', version: '1.0.0' });
server.addTool(
tool({
name: 'get_weather',
description: 'Get current weather for a city',
input: z.object({ city: z.string() }),
run: async ({ city }) => {
const data = await fetchWeather(city);
return { content: `${city}: ${data.temp}Β°C, ${data.condition}` };
},
})
);
server.start();That's the whole thing. Ship it.
π Project Structure
mcp-server-toolkit/
βββ packages/
β βββ core/ # createServer(), tool(), z helpers
β βββ code-search/ # Semantic codebase search server
β βββ database/ # Natural language DB query server
β βββ docs/ # Documentation indexing server
β βββ openapi/ # OpenAPI spec introspection server
β βββ git/ # Git history and diff server
β βββ shell/ # Sandboxed shell server
βββ examples/
β βββ claude-code/ # Drop-in config for Claude Code
β βββ cursor/ # Drop-in config for Cursor
β βββ custom-server/ # Starter template for custom tools
βββ docs/ # Full documentation
βββ CONTRIBUTING.mdπΊοΈ Roadmap
Code search (semantic + keyword)
PostgreSQL / MySQL / SQLite server
Docs server (Markdown + URL crawl)
OpenAPI introspection server
Notion server
Linear / Jira server
Supabase + PlanetScale managed DB support
Web UI for browsing registered tools
Auto-generated tool descriptions from schema
Want something on this list prioritised? Open an issue and add a π.
π€ Contributing
Contributions are what make this project worth starring. Here's how to get involved:
First time?
Look for issues labelled
good first issueβ these are scoped small on purpose.Comment on the issue to claim it before starting.
Fork the repo, make your changes, open a PR.
Adding a new server
The fastest path to a merged PR:
# Clone and install deps
git clone https://github.com/naveenayalla1-CS50/mcp-server-toolkit
cd mcp-server-toolkit
npm install
# Scaffold your server
npm run new-server -- --name my-awesome-server
# Run tests
npm test
# Submit your PREach new server needs:
A
README.mdexplaining what it does and the one-line install commandAt least one test in
__tests__/An example config block for Claude Code / Cursor
Guidelines
Keep each tool focused on doing one thing well β resist scope creep.
Never store credentials in code β always read from env vars.
Add your server to the table in the main README and to the
packages/list.
Code of Conduct
Be excellent to each other. See CODE_OF_CONDUCT.md.
π Security
All servers are read-only by default. Write access requires an explicit
--writableflag.Credentials are read from environment variables only β never hardcoded or logged.
The shell server uses an allowlist (
mcp-shell.config.json) β no arbitrary command execution.Found a vulnerability? Please email security@naveenayalla1-CS50.dev instead of opening a public issue.
π License
MIT Β© 2026 naveenayalla1-CS50
You're free to use this in personal projects, commercial products, and anything in between. Attribution appreciated but not required.
Share on Twitter Β· Open an issue
Built with β€οΈ for the agent era.
MCP server usage
This repository contains a TypeScript/Node.js toolkit of MCP servers.
Install
npm install
npm run build
npm run build --workspace=@mcp-toolkit/core
npm run build --workspace=@mcp-toolkit/code-search
node packages/code-search/dist/index.js
## MCP server usage
This repository contains a TypeScript/Node.js toolkit of MCP servers.
### Install
```bash
npm install
npm run buildAvailable Tools
3 toolslist_filesB
List files in the codebase matching a glob pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Glob pattern, e.g. "src/**/*.ts" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the basic behavior (listing files matching a glob), but does not mention details like recursion, return format, or limits. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with no unnecessary words. Front-loaded and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (one optional parameter, no annotations, no output schema), the description is minimally complete but lacks details about return values or behavior. It does not fully equip the agent for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds no extra meaning beyond the schema. Baseline 3 is appropriate; the description offers no additional parameter context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists files matching a glob pattern. It is specific about the action and resource, but does not differentiate from sibling tools like search_code or read_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description lacks context about appropriate use cases or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileC
Read the full contents of a file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File path relative to repo root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like file size limits, encoding, or side effects, but it only states the basic action. However, it is a read operation, so risk is low.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It communicates the core functionality efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description minimally covers the purpose but omits details like return format, encoding, or limitations that would help an agent use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description 'File path relative to repo root' is adequate. The tool description adds no further meaning beyond the schema, so baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the full contents of a file, using a specific verb and resource. It implicitly distinguishes from siblings like list_files (listing) and search_code (searching), though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_files or search_code. The description does not mention prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeA
Search for a keyword or pattern across the codebase. Returns file path, line number, and surrounding context.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword, function name, or pattern to search for | |
| filePattern | No | Glob pattern to limit search, e.g. "**/*.ts" | |
| maxResults | No | Max results to return (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the basic behavior (search, return results), but lacks details such as case sensitivity, regex support, or permission requirements. The description is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences with no wasted words. It front-loads the purpose and immediately states the return format. Slight improvement could be made by integrating usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description appropriately states what is returned. The parameters are fully described in the schema. The sibling tools provide context. Completeness is high for a search tool with moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already described. The tool description adds minimal extra meaning beyond 'keyword or pattern'. Baseline 3 is appropriate as no additional context is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search for a keyword or pattern'), the resource ('codebase'), and what is returned ('file path, line number, and surrounding context'). It is distinct from sibling tools list_files and read_file, which focus on listing and reading files, not searching content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The context implies it is for finding code occurrences, but there is no mention of when not to use it or alternative strategies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
list_files - First observed
read_file - First observed
search_code
TDQS
Scored across 3 tools
Each tool has a distinct purpose: listing files, reading contents, and searching code. No overlap or confusion possible.
All tools use consistent verb_noun naming: list_files, read_file, search_code. The pattern is uniform and predictable.
Three tools is minimal but well-scoped for a basic codebase exploration server. It covers the essential operations without being overly sparse.
The set covers listing, reading, and searching files, but lacks directory listing or file metadata tools, which would be expected for full codebase navigation.
Maintenance
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personalβ¦
- typeshipOAuthdev.typeship
Generate a typed SDK, CLI, and MCP server from any OpenAPI or GraphQL spec, and keep them current.
327 dev tools via REST API and MCP. Generate Dockerfiles, schemas, K8s, APIs, and more.
A simple Typescript MCP server built using the official MCP Typescript SDK and smithery/cli. Thisβ¦
Related MCP Servers
- -licenseAqualityNot gradedmaintenanceA TypeScript-based MCP server that generates API clients from OpenAPI specifications, allowing automated code generation through natural language.144 npm1-
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides TypeScript development tools for automated refactoring and code analysis.1-
- AlicenseAqualityDmaintenanceA TypeScript-aware MCP server that provides coding agents with repository discovery, code intelligence, and web project context for local codebases. It enables deep symbol navigation, diagnostic reporting, and structural analysis of monorepos without requiring full IDE integration.711 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA TypeScript-based MCP server that enables code search, file reading, and project management via the GitLab API.10 npm1ISC