Albacore

by jsmiff

Not rated
GitHub

About

Lightweight TypeScript server with Ollama integration that enables local text generation, embedding services, and optional Supabase database support for rapid prototyping of context-aware tools and resources.

Details

Author
jsmiff
Repository
jsmiff/mcp
Categories
Productivity, Developer Tools, Design, AI, Search, API, Project Management, Infrastructure

- Standardized MCP Server: A base server implementation with support for HTTP and stdio transports
- Generic MCP Client: A client for connecting to any MCP server
- Ollama Integration: Ready-to-use services for generating embeddings and text with Ollama
- Supabase Integration: Built-in support for Supabase vector database
- Modular Design: Clearly organized structure for resources, tools, and prompts
- Sample Templates: Example implementations to help you get started quickly

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Albacore
    Command (node, npx, python, etc.) npx
    Arguments
    • Argument 1 -y
    • Argument 2 @highlight/mcp-server

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Create a .env file with the following variables:

PORT=3000
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-key
OLLAMA_URL=http://localhost:11434
OLLAMA_EMBED_MODEL=nomic-embed-text
OLLAMA_LLM_MODEL=llama3
SERVER_MODE=http  # 'http' or 'stdio'
import MCPClient from "./client";

// Create a client instance
const client = new MCPClient({
serverUrl: "http://localhost:3000",
});

// Example: Call a tool
async function callSampleTool() {
const result = await client.callTool("sample-tool", {
query: "example query",
maxResults: 5,
});
console.log(result);
}

// Example: Read a resource
async function readResource() {
const items = await client.readResource("items://all");
console.log(items);
}

// Example: Get a prompt
async function getPrompt() {
const prompt = await client.getPrompt("simple-prompt", {
task: "Explain quantum computing",
});
console.log(prompt);
}

// Don't forget to disconnect when done
await client.disconnect();

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "albacore": {
            "env": {},
            "args": [
                "-y",
                "@highlight/mcp-server"
            ],
            "command": "npx"
        }
    }
}

Linux

{
    "env": [],
    "args": [
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "npx"
}

Macos

{
    "env": [],
    "args": [
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "npx"
}

Windows

{
    "env": [],
    "args": [
        "/c",
        "npx",
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "cmd"
}

MCP Base - A Generic Model Context Protocol Framework

This folder contains a general-purpose base implementation of the Model Context Protocol (MCP) for building AI-powered applications. It provides a standardized way to create MCP servers and clients that can be used to integrate LLMs into your applications.

📋 Features

- Standardized MCP Server: A base server implementation with support for HTTP and stdio transports
- Generic MCP Client: A client for connecting to any MCP server
- Ollama Integration: Ready-to-use services for generating embeddings and text with Ollama
- Supabase Integration: Built-in support for Supabase vector database
- Modular Design: Clearly organized structure for resources, tools, and prompts
- Sample Templates: Example implementations to help you get started quickly

🛠️ Directory Structure

_mcp-base/
├── server.ts            # Main MCP server implementation
├── client.ts            # Generic MCP client
├── utils/               # Utility services
│   ├── ollama_embedding.ts    # Embedding generation with Ollama
│   └── ollama_text_generation.ts  # Text generation with Ollama
├── tools/               # Tool implementations
│   └── sample-tool.ts   # Example tool template
├── resources/           # Resource implementations
│   └── sample-resource.ts  # Example resource template
├── prompts/             # Prompt implementations
│   └── sample-prompt.ts # Example prompt template
└── README.md            # This documentation

🚀 Getting Started

Prerequisites

- Node.js and npm/pnpm
- Ollama for local embedding and text generation
- Supabase account for vector storage

Environment Setup

Create a .env file with the following variables:

PORT=3000
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-key
OLLAMA_URL=http://localhost:11434
OLLAMA_EMBED_MODEL=nomic-embed-text
OLLAMA_LLM_MODEL=llama3
SERVER_MODE=http  # 'http' or 'stdio'

Server Initialization

1. Import the required modules
2. Register your resources, tools, and prompts
3. Start the server

// Import base server and utilities
import server from "./server";
import { registerSampleResources } from "./resources/sample-resource";
import { registerSampleTool } from "./tools/sample-tool";
import { registerSamplePrompts } from "./prompts/sample-prompt";

// Initialize database if needed
async function initializeDatabase() {
// Your database initialization logic
}

// Register your components
registerSampleResources(server, supabase);
registerSampleTool(server, textGenerator, embeddings, supabase);
registerSamplePrompts(server, supabase);

// Start the server
startServer();

Client Usage

import MCPClient from "./client";

// Create a client instance
const client = new MCPClient({
serverUrl: "http://localhost:3000",
});

// Example: Call a tool
async function callSampleTool() {
const result = await client.callTool("sample-tool", {
query: "example query",
maxResults: 5,
});
console.log(result);
}

// Example: Read a resource
async function readResource() {
const items = await client.readResource("items://all");
console.log(items);
}

// Example: Get a prompt
async function getPrompt() {
const prompt = await client.getPrompt("simple-prompt", {
task: "Explain quantum computing",
});
console.log(prompt);
}

// Don't forget to disconnect when done
await client.disconnect();

📚 Extending the Framework

Creating a New Tool

1. Create a new file in the tools/ directory
2. Define your tool function and schema using Zod
3. Implement your tool logic
4. Register the tool in your server

Creating a New Resource

1. Create a new file in the resources/ directory
2. Define your resource endpoints and schemas
3. Implement your resource logic
4. Register the resource in your server

Creating a New Prompt

1. Create a new file in the prompts/ directory
2. Define your prompt schema and parameters
3. Implement your prompt template
4. Register the prompt in your server

📄 License

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.