ministic-fishstick

ministic-fishstick

Minimal high-performance MCP server for semantic code indexing and vector search using Bun, SQLite, and Tree-Sitter. It enables AI agents to index, search, and manage codebases via tools like code_index_search and code_index_start.

Category
Visit Server

README

ministic-fishstick

Minimal, high-performance Model Context Protocol (MCP) server for semantic code indexing and vector search powered by Bun and TypeScript.

ministic-fishstick extracts code-indexing capabilities into a standalone MCP server that can be used directly with AI CLI agents (OpenCode, Claude Desktop, Cursor) as well as GitHub Copilot Agents in VS Code.


Features

  • šŸš€ Bun Native & Fast: Built for Bun with zero-lock overhead and fast execution.
  • šŸ’¾ Zero-Docker SQLite Vector Search: Native bun:sqlite vector storage with Float32Array cosine similarity — runs locally without needing Docker or external database services.
  • šŸ”Œ Qdrant Support: Optional fallback or upgrade to a remote or local Qdrant vector database (@qdrant/js-client-rest).
  • 🌳 Tree-Sitter AST Parsing: Accurate semantic code block extraction for 25+ programming languages using web-tree-sitter and tree-sitter-wasms.
  • šŸ›”ļø Smart Ignore Rules (.fishignore + .gitignore): Respects both workspace .gitignore and .fishignore patterns to exclude sensitive files or build output.
  • āš™ļø Tiered Configuration System: Resolves configuration seamlessly across runtime MCP tool overrides, workspace .fishstick.json, global ~/.config/fishstick/fishstick.json, .env files, and defaults.
  • šŸ¤– VS Code & Copilot Agent Ready: Includes a vscode-extension/ wrapper exposing native VS Code MCP Server contributions (contributes.mcpServers) and Copilot LM tools.

Default Behavior

When started without extra configuration:

  1. Embedding Provider: Defaults to OpenAI using text-embedding-3-small (requires OPENAI_API_KEY).
  2. Vector Store: Defaults to local zero-docker sqlite storage located at <workspace>/.fishstick/vectors.sqlite.
  3. Local Cache: Incremental file scan hashes stored in <workspace>/.fishstick/cache.sqlite.
  4. Target Directory: Indexes the current working directory (process.cwd()).

Getting Started

Prerequisites

  • Bun (v1.1+): Install via curl -fsSL https://bun.sh/install | bash
  • An OpenAI API Key (or an alternative supported provider like Ollama, Gemini, Mistral, Bedrock, etc.)

Installation & Local Setup

# Clone the repository
git clone https://github.com/your-org/ministic-fishstick.git
cd ministic-fishstick

# Install dependencies
bun install

# Run tests
bun test

# Type-check
bun check-types

Usage

1. Running as an MCP Server (Stdio)

Start the stdio MCP server directly using Bun:

OPENAI_API_KEY="sk-..." bun run src/index.ts

2. Configuring in OpenCode / Claude Desktop / Cursor

Add ministic-fishstick to your MCP client configuration (e.g. opencode.json or claude_desktop_config.json):

{
  "mcpServers": {
    "fishstick": {
      "command": "bun",
      "args": ["run", "/path/to/ministic-fishstick/src/index.ts"],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "VECTOR_STORE_PROVIDER": "sqlite"
      }
    }
  }
}

3. VS Code Copilot Agent Integration

For VS Code users, the included vscode-extension/ folder provides an extension wrapper:

  1. Open vscode-extension/ in VS Code or install the compiled extension package.
  2. The extension automatically registers fishstick in VS Code's native MCP server catalog and exposes the fishstick_search_code tool to GitHub Copilot chat participants and agents.

Available MCP Tools

The server exposes five core MCP tools:

MCP Tool Name Description
code_index_search Perform semantic vector search over the indexed codebase. Accepts query, optional directoryPrefix, and workspacePath.
code_index_start Trigger background directory scan and file watcher (chokidar) for a workspace folder.
code_index_status Retrieve current indexing state (Standby, Indexing, Indexed, Error), block counts, and file watcher progress.
code_index_clear Clear vector database tables and local cache files for a workspace.
code_index_configure Dynamically update embedding provider, model ID, search minScore, maxResults, or vector store at runtime.

Configuration Hierarchy

Configuration is resolved automatically in the following order of precedence (highest to lowest):

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│ Priority 1: Dynamic MCP Tool Calls (`code_index_config`)│
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Priority 2: Workspace Config (`.fishstick.json`)        │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Priority 3: Global User Config                          │
│             (`~/.config/fishstick/fishstick.json`)      │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│ Priority 4: Environment Variables (`.env`) / Defaults   │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Example .fishstick.json or ~/.config/fishstick/fishstick.json

{
  "enabled": true,
  "vectorStore": {
    "provider": "sqlite",
    "qdrantUrl": "http://localhost:6333"
  },
  "embedder": {
    "provider": "openai",
    "modelId": "text-embedding-3-small",
    "apiKey": "sk-..."
  },
  "search": {
    "minScore": 0.3,
    "maxResults": 20
  }
}

Environment Variables (.env)

Variable Description Default
OPENAI_API_KEY OpenAI API Key for default embedder —
VECTOR_STORE_PROVIDER sqlite (zero-docker local) or qdrant sqlite
QDRANT_URL Qdrant database server URL http://localhost:6333
EMBEDDER_PROVIDER Embedder provider (openai, ollama, gemini, etc.) openai
EMBEDDER_MODEL_ID Model identifier text-embedding-3-small
SEARCH_MIN_SCORE Similarity score cutoff (0.0 to 1.0) 0.3
SEARCH_MAX_RESULTS Max results returned by search 20

Ignore Rules (.fishignore + .gitignore)

ministic-fishstick uses FishIgnoreController to filter files before parsing and indexing:

  • .gitignore: Automatically respected if present in the workspace.
  • .fishignore: Custom ignore file for indexing rules (uses standard .gitignore glob syntax).
  • Auto-ignored: .git, .fishignore, .fishstick.json, node_modules/, binary files, and vector database caches are always excluded.

License

Apache 2.0 Ā© 2026 Israel Flores-Arbolay.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured