mcp-server-base
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-baseSearch my notes for references to Project Phoenix and summarize them"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server Base v2.0 ā Scale & Operability (2026)
Modern Model Context Protocol server using the latest stack:
MCP SDK
1.12+āMcpServerhigh-level API +StreamableHTTPServerTransport(new) &StdioServerTransportTypeScript 5.7 ESM +
NodeNextmoduleZod validation ā auto JSON Schema + env validation (
src/config.ts:1)Express 4 + helmet + CORS allowlist + rate-limit + health/ready + Admin UI
Dual transport: STDIO (Claude Desktop) and Streamable HTTP (remote, 2025-03 spec, stateless + stateful resumability via RedisEventStore)
Structured tool/resource/prompt modules + RAG (local vector), Web (cached), GitHub integrations
OTEL tracing/metrics (
src/utils/otel.ts:1), Tasks (experimental +create_task), k6 load teststsxwatch,vitest(130 tests, 91% coverage), graceful shutdown,docker-compose(redis, postgres, qdrant)
š Quick Start
npm install
npm run build
# STDIO (for Claude Desktop, Cursor, opencode, etc.)
npm start
# HTTP (Streamable HTTP - latest)
npm run start:http
# ā http://localhost:3000/mcp
# ā health http://localhost:3000/healthDev
npm run dev # stdio watch
npm run dev:http # http watch (Streamable HTTP at http://localhost:3000/mcp)
npm test # unit + e2e (InMemory + HTTP)
npm run test:coverage # coverage 80% thresholds
npm run lint # eslint 9 flat config
npm run format:check # prettier
npm run typecheck # tsc --noEmit
npm run buildCI
.github/workflows/ci.yml runs on push/PR to main with Node 20+22 matrix: lint, format:check, typecheck, test:coverage, build, docker build.
Related MCP server: MCP Server
š Transports
Transport | Use | Command |
STDIO | Local clients (Claude Desktop) |
|
Streamable HTTP | Remote / Docker / Cloud |
|
Streamable HTTP is the new standard replacing SSE (deprecated March 2025).
š§° Tools (31)
Tool | Description | Input |
| Echo message |
|
| add/sub/mul/div |
|
| Current time |
|
| Fetch URL |
|
| List files under ALLOWED_ROOT |
|
| Read file (1MB limit) |
|
| Write file + triggers resource changed |
|
| Search text inside files |
|
| Set KV in memory |
|
| Get KV |
|
| Delete KV |
|
| List KVs | ā |
| Clear all | ā |
| SQL via alasql (users, notes) |
|
| List tables row counts | ā |
| Shell (allowlist, disabled by default) |
|
| Elicitation demo (contact/preferences) |
|
| Sampling demo (LLM) |
|
| Ingest text (chunked, embedded) |
|
| Vector search (cosine) |
|
| List docs | ā |
| Clear vector store | ā |
| Brave API (mock if no key) |
|
| Tavily API (mock if no key) |
|
| Cached web fetch |
|
| GitHub search repos |
|
| GitHub get repo |
|
| GitHub get issue |
|
| Create background task |
|
| Get task status |
|
| Get task result |
|
š¦ Resources (6)
config://server-infoā server metadata (JSON, now includesfeatures)greeting://{name}ā dynamic greeting templatefile:///{+path}ā sandboxed file (ALLOWED_ROOT), list + complete,file:///notes.txtmemory://{key}ā memory KV, list + completedb://{table}/{id}ā demo DB row (users/notes), list + completedocs://{id}ā RAG chunk (ingested viarag_ingest), list + complete
š¬ Prompts (4)
code-reviewā args:language,codeexplain-conceptā args:concept,levelsummarizeā args:text,length(short/medium/long),style(bullets/paragraph/tldr)researchā args:topic,depth(overview/deep),audience(beginner/expert/executive)
āļø Client Config
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"mcp-server-base": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"]
}
}
}HTTP Client
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({ name: 'my-client', version: '1.0.0' });
await client.connect(new StreamableHTTPClientTransport(new URL('http://localhost:3000/mcp')));
const tools = await client.listTools();Inspector
npm run inspect
# or
npx @modelcontextprotocol/inspector node dist/index.js
npx @modelcontextprotocol/inspector http://localhost:3000/mcpš³ Docker
# Single container
docker build -t mcp-server-base .
docker run -p 3000:3000 --env TRANSPORT=http mcp-server-base
# Full stack (app + redis + postgres + qdrant) ā see docker-compose.yml
docker compose up -d
docker compose logs -f app
# ā http://localhost:3000/health, http://localhost:3000/mcp
# ā redis :6379, postgres :5432, qdrant :6333RAG Demo (ingest ā search ā docs://)
# via MCP tools (Inspector or Client)
# 1. ingest
rag_ingest { "text": "MCP is Model Context Protocol...", "id": "mcp-intro" }
# 2. search
rag_search { "query": "what is MCP?", "topK": 3 }
# 3. read resource
# docs://mcp-intro ā returns ingested textš Structure
src/
āāā index.ts # entry: stdio + http (helmet/cors/rateLimit/auth/resumability)
āāā server.ts # createMcpServer() factory
āāā config.ts # zod env (AUTH, CORS, rateLimit, RAG, cache, integrations)
āāā types.ts # Zod schemas
āāā middleware/auth.ts # AUTH_MODE none|apiKey|bearer
āāā middleware/rateLimit.ts
āāā middleware/requestId.ts
āāā utils/logger.ts # stderr, JSON/text, redaction, child(requestId)
āāā utils/eventStore.ts # InMemoryEventStore for Last-Event-ID
āāā utils/cache.ts # MemoryCache (TTL) + defaultCache
āāā utils/queue.ts # SimpleQueue
āāā tools/ # 31 tools: echo, fs, memory, db, shell, rag, web, github, elicitation, sampling, tasks
ā āāā filesystem.tool.ts, memory.tool.ts, database.tool.ts, shell.tool.ts
ā āāā rag.tool.ts, web.tool.ts, github.tool.ts, elicitation.tool.ts, sampling.tool.ts, tasks.tool.ts
āāā resources/ # 6 resources: config, greeting, file, memory, db, docs
āāā routes/admin.ts # Admin UI + metrics + spans
āāā prompts/ # 4 prompts: code-review, explain-concept, summarize, researchAdd a new tool: create src/tools/my.tool.ts ā export registerMyTool(server) ā add to src/tools/index.ts.
š Security (Phase 2)
Helmet headers (
x-dns-prefetch-control,x-frame-options,x-content-type-options, etc.) viahelmet@7(src/index.ts:1)CORS allowlist (
CORS_ORIGIN=*or comma list) withcorscredentials handling (src/config.ts:60)Auth
AUTH_MODE=none|apiKey|beareratsrc/middleware/auth.ts:1ā401without validX-API-KeyorAuthorization: Bearer(health/ready & OPTIONS excluded)Rate limiting
express-rate-limit(default 100/15min) on/mcpā429 Too Many Requests(src/middleware/rateLimit.ts:1)RequestId (
X-Request-IdrandomUUID, echo header, child logger correlation) (src/middleware/requestId.ts:1)Zod env validation (
src/config.ts:1) āparseEnv()validatesPORT,AUTH_MODE,API_KEYcross-field, fails fast on invalid envStructured logger JSON/text,
[REDACTED]forauthorization,apiKey,token(src/utils/logger.ts:24)Resumability
InMemoryEventStore(src/utils/eventStore.ts:1) + stateful session map whenRESUMABILITY_ENABLED=true(replay viaLast-Event-ID,GET /mcpstream,DELETEclose)Docker hardening non-root
appuser+HEALTHCHECK(Dockerfile:1)Tests:
tests/unit/auth.test.ts,tests/unit/logger.test.ts,tests/unit/eventStore.test.ts,tests/e2e/security.test.ts(helmet/auth/rateLimit/resumability) ā67 tests ā 130 total with Phase 5, 90.89% coverage
š Integrations (Phase 4)
Cache
MemoryCacheTTL (src/utils/cache.ts:1) ādefaultCachefor web/github,SimpleQueue(src/utils/queue.ts:1)RAG local vector (hash embedding 128-dim, cosine, chunk 500/50) at
src/tools/rag.tool.ts:1ārag_ingest(chunked +sendResourceListChanged),rag_search(topK, threshold),rag_list,rag_clear+docs://{id}resourceWeb
src/tools/web.tool.ts:1ābrave_search(mock if noBRAVE_API_KEY),tavily_search(mock),web_fetch(cached viadefaultCache,CACHE_TTL_MS)GitHub
src/tools/github.tool.ts:1āgithub_search_repos,github_get_repo,github_get_issue(cached,GITHUB_TOKENfor rate limit)Stack
docker-compose.yml:1(app + redis:7 + postgres:16 + qdrant:v1.12.4) with healthchecksDemo
rag_ingest ā rag_search ā docs://E2E verified intests/integrations.test.ts:1(21 tests)
š Scale & Operability (Phase 5 ā v2.0)
Versioned MCP
v2.0.0(package.json:1,config.MCP_SERVER_VERSION) with instructions per minor (src/server.ts:1)OTEL tracing/metrics (
src/utils/otel.ts:1) ācreateSpan/withSpan,incrementCounter/recordHistogram,getMetrics/getSpans, JSON export stub forOTEL_EXPORTER_OTLP_ENDPOINT,OTEL_ENABLEDflagRedisEventStore (
src/utils/redisEventStore.ts:1) āEventStoreimpl withstoreEvent/replayEventsAfter, in-memory fallback,eventStoreFactory.create()for horizontal scale (EVENT_STORE_TYPE=memory|redis,REDIS_URL)Admin UI (
src/routes/admin.ts:1) āGET /admin(HTML dashboard),/admin/tools|resources|prompts|metrics|spans|stores|health(JSON), protected viaADMIN_TOKEN(X-Admin-Token),ADMIN_ENABLEDflagTasks (
src/tools/tasks.tool.ts:1) ā experimentaldelay_task(if SDK tasks available) + fallbackcreate_task/get_task/get_task_result(in-memory, polling),SimpleQueue/MemoryCacheinfraBench
k6/load.js:1āhttp_req_duration p(95)<100ms,stages10ā50 VUs,checks >99%,npm run bench/bench:localCompose
docker-compose.yml:1already includes redis/postgres/qdrant for scaleTests:
tests/scale.test.ts:1(OTEL spans/metrics, RedisEventStore replay, cache TTL, queue, admin HTML/metrics/token/ready, tasks create/poll, version, k6 script) ā 130 totalDeploy ready for Fly.io/Cloud Run (stateless + RedisEventStore), GHCR via
release.yml, npm2.0.0Logger stderr-safe, never logs secrets (redaction)
Zod ā JSON Schema via SDK (
src/types.ts:1,src/tools/*.tool.ts)Timeout on fetch (10s) + structured errors
Graceful shutdown (
SIGINT/SIGTERM)Health (
GET /health) & ready (GET /ready) separate from MCPStateless default (
sessionIdGenerator: undefined), stateful whenRESUMABILITY_ENABLED=true(src/index.ts:22)Type-safe, strict TS + ESLint flat + Prettier + husky + lint-staged
Coverage 85% lines / 70% branches enforced (
vitest.config.ts:1), 130 tests: unit + e2e HTTP/security/capabilities/integrations/scale
š¤ Contributing
See CONTRIBUTING.md ā nvm use, npm test, add tool/resource/prompt, ensure lint/typecheck/test pass. See CODE_OF_CONDUCT.md.
š MCP Docs
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that supports STDIO, SSE and Streamable HTTP protocols for AI model interactions.131MIT
- AlicenseNot gradedqualityFmaintenanceA robust server implementing the Model Context Protocol with SSE and STDIO transport, enabling real-time communication and extensible tooling for AI models.3813MIT
- AlicenseBqualityCmaintenanceA production-packaged Model Context Protocol server for coding agents that routes large file, git, web, database, and other tasks through token-budgeted tools and workflows.6111MIT
- AlicenseNot gradedqualityCmaintenanceA production-ready Model Context Protocol suite over Streamable HTTP providing a sandboxed file server with tools, resources, prompts, and both manual and AI-driven clients.MIT
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoā¦
A Model Context Protocol server for Wix AI tools
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ahmedalbanna/mcp-server-base'
If you have feedback or need assistance with the MCP directory API, please join our Discord server