Skip to main content
Glama
README.md
# FxKit MCP Server

A Model Context Protocol (MCP) server that provides comprehensive documentation and assistance for the FxKit C# functional programming library.

## Overview

FxKit MCP dynamically fetches and serves documentation from the official [FxKit documentation site](https://taxfyle.github.io/FxKit/), providing AI models with:

- Complete documentation for all FxKit types (Option, Result, Validation, Unit)
- Compiler services documentation (source generators, analyzers)
- Code examples and API references
- Search capabilities across all documentation
- Pre-built prompts for common FxKit patterns

## Features

### Resources
The server exposes FxKit documentation sections as MCP resources:
- `introduction` - FxKit overview and concepts
- `getting-started` - Installation and setup guide
- `option` - Option type documentation
- `result` - Result type documentation  
- `validation` - Validation type documentation
- `unit` - Unit type documentation
- `compiler-overview` - Compiler services overview
- `enum-match` - EnumMatch generator
- `union` - Union type generator
- `lambda` - Lambda generator
- `transformer` - Transformer generator
- `testing` - Testing utilities

### Tools
Interactive tools for querying FxKit documentation:
- `search_documentation` - Search across all documentation
- `get_examples` - Get code examples for specific features
- `list_packages` - List available NuGet packages

### Prompts
Pre-configured prompts for common FxKit patterns:
- `convert-nullable-to-option` - Convert nullable types to Option
- `railway-oriented-programming` - Implement railway-oriented patterns
- `validation-multiple-errors` - Use Validation for error accumulation
- `generate-union-types` - Create union types with source generators

## Installation

### From Source

1. Clone this repository:
```bash
git clone https://github.com/taxfyle/fxkit-mcp.git
cd fxkit-mcp
```

2. Install dependencies:
```bash
npm install
```

3. Build the project:
```bash
npm run build
```

### Global Installation

```bash
npm install -g @taxfyle/fxkit-mcp
```

## Usage

### With Claude Code
```json
{
  "mcpServers": {
    "fxkit-docs": {
      "command": "npx",
      "args": [
        "-y",
        "@taxfyle/fxkit-mcp@latest"
      ],
      "env": {}
    }
  }
}
```

### With Claude Desktop

Add the following to your Claude Desktop configuration file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "fxkit-docs": {
      "command": "node",
      "args": ["/path/to/fxkit-mcp/dist/index.js"]
    }
  }
}
```

Or if installed globally:

```json
{
  "mcpServers": {
    "fxkit-docs": {
      "command": "fxkit-mcp"
    }
  }
}
```

### With MCP Inspector

Test the server using the MCP Inspector:

```bash
npx @modelcontextprotocol/inspector tsx src/index.ts
```

### Programmatic Usage

```typescript
import { FxKitMcpServer } from 'fxkit-mcp';

const server = new FxKitMcpServer();
await server.start();
```

## Development

### Running in Development Mode

```bash
npm run dev
```

### Project Structure

```
fxkit-mcp/
├── src/
│   ├── index.ts              # Main entry point
│   ├── server.ts              # MCP server implementation
│   ├── types.ts               # TypeScript type definitions
│   ├── fetcher/
│   │   └── docs-fetcher.ts    # Documentation fetching logic
│   ├── resources/             # Resource handlers (if extended)
│   ├── tools/                 # Tool implementations (if extended)
│   └── prompts/               # Prompt templates (if extended)
├── dist/                      # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md
```

### Testing

The server includes a test mode that verifies all documentation endpoints are accessible:

```bash
npm test
```

## Examples

### Using with an AI Assistant

Once configured, you can ask your AI assistant questions like:

- "Show me the FxKit documentation for the Result type"
- "Search for examples of railway-oriented programming with FxKit"
- "How do I convert nullable types to Option in FxKit?"
- "Generate a union type for payment methods using FxKit"

The AI will use the MCP server to fetch relevant documentation and provide accurate, up-to-date information about FxKit.

## Architecture

The server uses a dynamic fetching approach:

1. **No Static Content**: Documentation is fetched on-demand from the live FxKit documentation site
2. **Caching**: Responses are cached for 5 minutes to improve performance
3. **HTML Parsing**: Uses Cheerio to extract content and code examples from documentation pages
4. **Type Safety**: Full TypeScript implementation with strict typing

## Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

### Adding New Documentation Sections

To add new documentation sections:

1. Update the paths array in `src/fetcher/docs-fetcher.ts`
2. Add corresponding resource registration in `src/server.ts`
3. Test that the new section is accessible

### Extending Tools

New tools can be added in `src/server.ts` in the `setupTools()` method. Follow the existing pattern using `registerTool()`.

## License

MIT

## Acknowledgments

- [FxKit](https://github.com/taxfyle/FxKit) - The functional programming library for C#
- [Model Context Protocol](https://modelcontextprotocol.io/) - The protocol specification
- [effect-mcp](https://github.com/niklaserik/effect-mcp) - Inspiration for MCP server structure

## Support

For issues related to:
- FxKit library: Visit the [FxKit GitHub repository](https://github.com/taxfyle/FxKit)
- This MCP server: Open an issue in this repository
- MCP protocol: Check the [MCP documentation](https://modelcontextprotocol.io/)# fxkit-mcp