# D0UGWITHSEISMIC/WITHSEISMIC-MCP

![WithSeismic MCP](withseismic-mcp.png)

```
SYSTEMS ONLINE • NEURAL INTERFACE ACTIVE • COMBAT DATA ANALYSIS • TACTICAL OVERLAY ENABLED • PERFORMANCE METRICS NOMINAL
```

[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)
[![Node.js](https://img.shields.io/badge/Node.js-18.x-green.svg)](https://nodejs.org/)
[![pnpm](https://img.shields.io/badge/pnpm-8.x-orange.svg)](https://pnpm.io/)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Discord](https://img.shields.io/badge/Discord-Join%20Us-7289da.svg?logo=discord&logoColor=white)](https://discord.gg/BX25FcS53N)
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/RTm6ec?referralCode=dougie)

A production-ready MCP server template for hosting your own AI tools and prompts. Deploy remotely or run locally - built for developers who want to expose their tools to AI models without the infrastructure headaches.

## ://WHO_IS_THIS_FOR?

This template is perfect for:

- **AI Tool Developers**: Build and host your own tools that AI models can interact with
- **Teams & Organizations**: Set up a shared MCP server for your AI applications
- **Individual Developers**: Quick-start your MCP development with a production-ready setup
- **API Providers**: Expose your services to AI models through a standardized interface

Whether you want to:

- 🌐 Host a remote MCP server that multiple clients can connect to
- 🔧 Run locally via stdio for development and testing
- 🚀 Deploy a production-ready MCP implementation
- 🛠️ Build tools without worrying about infrastructure

This template provides everything you need to get started.

## ://OVERVIEW

The MCP server provides two ways to expose your tools to AI models:

1. **Remote Server Mode (SSE)**: Deploy as a remote server that multiple clients can connect to

   - Perfect for production deployments
     (`pnpm start:sse`)
   - Supports multiple simultaneous connections
   - Easy deployment to platforms like Railway
   - Secure and scalable

2. **Local Mode (stdio)**: Run locally for development and testing
   (`pnpm start`)
   - Great for local development
   - Direct stdio communication
   - Fast iteration and debugging

Key Features:

- **Tools**: Executable functions that models can call
- **Prompts**: Template-based message generators
- **Auto-Discovery**: Automatic registration of your components
- **Type Safety**: Full TypeScript support throughout

## ://WHY_USE_THIS_MCP_SERVER_TEMPLATE?

While the Model Context Protocol (MCP) is in its early stages, one thing is clear: **rapid adoption requires frictionless development**. This implementation is built with a singular focus: **letting developers focus on building great tools, not infrastructure**.

### INSTANT_DEPLOYMENT

```bash
# Option 1: One-Click Deploy
Click the "Deploy on Railway" button above ☝️

# Option 2: Local Setup
pnpm install && pnpm dev
```

### ZERO_FRICTION_DEVELOPMENT

- **No Boilerplate**: Define your tool, import it, and you're done. We handle the rest.
- **Auto-Registration**: Tools and prompts are automatically discovered and registered.
- **Type Safety**: Full TypeScript support with zero configuration.

### BATTLE_TESTED_ARCHITECTURE

- **Production Ready**: Built for reliability and performance.
- **Scalable Design**: From simple tools to complex AI interactions.
- **Error Resilient**: Robust error handling and debugging built-in.

### DEVELOPER_EXPERIENCE_FIRST

```typescript
// That's it. This is all you need to create a tool.
export const myTool = new Tool(
  {
    name: "myTool",
    description: "What my tool does",
    inputSchema: z.object({ query: z.string() }),
    outputSchema: z.object({ result: z.string() }),
  },
  async (args) => {
    // Your logic here
    return { result: "Done!" };
  },
);
```

We handle:

- ⚡ Connection management
- 🔄 Tool registration
- 🛡️ Input validation
- 📦 State management
- 🚨 Error handling
- 📊 Logging and metrics

You focus on:

- 🎯 Building amazing tools
- 🧠 Creating powerful prompts
- 🚀 Shipping features

## ://GETTING_STARTED

### INSTALLATION

```bash
pnpm install
```

### RUNNING_THE_SERVER

Two modes are available:

1. Standard mode (stdio):

```bash
pnpm dev      # Development with hot reload
pnpm start    # Production
```

2. SSE (Server-Sent Events) mode:

```bash
pnpm dev:sse  # Development with hot reload
pnpm start:sse # Production
```

When running in SSE mode, connect to: `http://localhost:3001/sse`

## ://CORE_CONCEPTS

### TOOLS

Tools are executable functions that models can invoke. Each tool:

- Has defined input/output schemas using Zod
- Is automatically registered with the registry
- Can perform any operation (calculation, file I/O, API calls, etc.)

Example tool:

```typescript
import { z } from "zod";
import { Tool } from "../core";

const MyToolInputSchema = z.object({
  param1: z.string().describe("Parameter description"),
});

const MyToolOutputSchema = z.object({
  result: z.string().describe("Result description"),
});

export const myTool = new Tool(
  {
    name: "myTool",
    description: "What my tool does",
    inputSchema: MyToolInputSchema,
    outputSchema: MyToolOutputSchema,
  },
  async (args) => {
    const input = MyToolInputSchema.parse(args);
    // Tool logic here
    return { result: "processed result" };
  },
);
```

### PROMPTS

Prompts are message generators that help structure model interactions. Each prompt:

- Defines its argument schema
- Generates messages in a consistent format
- Is automatically registered with the registry

Example prompt:

```typescript
import { Prompt } from "../core";

export const myPrompt = new Prompt(
  {
    name: "myPrompt",
    description: "What my prompt does",
    arguments: [
      {
        name: "arg1",
        description: "Argument description",
        required: true,
      },
    ],
  },
  async (args) => {
    return [
      {
        role: "system",
        content: {
          type: "text",
          text: `Generated message using ${args.arg1}`,
        },
      },
    ];
  },
);
```

## ://ADDING_NEW_COMPONENTS

### Creating a New Tool

1. Create a new file in `src/modules/tools/`
2. Define your input/output schemas using Zod
3. Create and export your tool instance
4. Add the export to `src/modules/tools/index.ts`

The registry will automatically:

- Register your tool
- Make it available to models
- Handle validation and error handling

### Creating a New Prompt

1. Create a new file in `src/modules/prompts/`
2. Define your argument schema
3. Create and export your prompt instance
4. Add the export to `src/modules/prompts/index.ts`

The registry will automatically:

- Register your prompt
- Make it available to models
- Handle message generation and errors

## Architecture

### Core Components

- **Registry**: Central manager for all tools and prompts
- **Tool**: Base class for executable functions
- **Prompt**: Base class for message generators
- **Server**: MCP protocol implementation

### Auto-Registration

The system uses a singleton Registry pattern that:

1. Automatically registers tools and prompts on import
2. Provides type-safe access to components
3. Handles all MCP protocol interactions

### Error Handling

The system includes robust error handling:

- Type validation via Zod schemas
- Execution error wrapping
- Detailed error messages for debugging

## Development

### Type Safety

All components use TypeScript for full type safety:

- Input/output schemas are defined using Zod
- Type inference for tool arguments and results
- Comprehensive error types

### Testing

Run tests using:

```bash
pnpm test
```

### Best Practices

1. Always define clear input/output schemas
2. Use descriptive names and documentation
3. Handle errors gracefully
4. Follow the TypeScript guidelines in the codebase

## ://CONTRIBUTING

```
NEURAL INTERFACE DETECTED • INITIATING COLLABORATION PROTOCOLS • READY FOR UPLINK
```

We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on:

- Development workflow
- Code style guidelines
- Pull request process
- Issue reporting

Join our [Discord community](https://discord.gg/withseismic) to connect with other contributors!

## ://SUPPORT

```
SUPPORT PROTOCOLS ACTIVE • COMMUNICATION CHANNELS OPEN • READY TO ASSIST
```

- 📫 Email: <hello@withseismic.com>
- 💬 Discord: [Join our server](https://discord.gg/BX25FcS53N)

## ://LICENSE

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

© 2025 Doug, at WithSeismic dot com.
