MCP server registry

This commit is contained in:
Yiorgis Gozadinos 2025-10-08 11:00:52 +03:00
parent 09528221b5
commit c9fc0cd750
No known key found for this signature in database
3 changed files with 292 additions and 0 deletions

35
.github/workflows/publish-mcp.yml vendored Normal file
View file

@ -0,0 +1,35 @@
name: Publish to MCP Registry
on:
workflow_run:
workflows: ["Build & publish to pypi"]
types:
- completed
jobs:
publish-mcp:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Generate server.json from template
run: |
VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
sed "s/{{VERSION}}/$VERSION/g" server.json > server.json.tmp
mv server.json.tmp server.json
echo "Generated server.json with version: $VERSION"
- name: Install MCP Publisher
run: |
curl -L https://github.com/modelcontextprotocol/publisher/releases/latest/download/mcp-publisher-linux-x86_64 -o mcp-publisher
chmod +x mcp-publisher
sudo mv mcp-publisher /usr/local/bin/
- name: Login to MCP Registry
run: mcp-publisher login github-oidc
- name: Publish to MCP Registry
run: mcp-publisher publish

4
.gitignore vendored
View file

@ -21,3 +21,7 @@ tests/data/
TODO.md
PLAN.md
DEVNOTES.md
# mcp registry
.mcpregistry_github_token
.mcpregistry_registry_token

253
server.json Normal file
View file

@ -0,0 +1,253 @@
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"name": "io.github.ggozad/haiku-rag",
"version": "{{VERSION}}",
"description": "Agentic Retrieval Augmented Generation (RAG) with LanceDB",
"repository": {
"url": "https://github.com/ggozad/haiku.rag",
"source": "github"
},
"homepage": "https://github.com/ggozad/haiku.rag",
"license": "MIT",
"keywords": ["rag", "lancedb", "vector-database", "embeddings", "search", "qa", "research"],
"vendor": {
"name": "Yiorgis Gozadinos",
"url": "https://github.com/ggozad"
},
"deployment": {
"packages": [
{
"type": "pypi",
"package": "haiku.rag",
"command": {
"linux-x86_64": {
"shell": "uvx",
"args": ["haiku.rag", "serve", "--stdio"]
},
"darwin-arm64": {
"shell": "uvx",
"args": ["haiku.rag", "serve", "--stdio"]
},
"darwin-x86_64": {
"shell": "uvx",
"args": ["haiku.rag", "serve", "--stdio"]
},
"win32-x86_64": {
"shell": "uvx.exe",
"args": ["haiku.rag", "serve", "--stdio"]
}
},
"environmentVariables": [
{
"name": "ENV",
"description": "Runtime environment (production or development)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "DEFAULT_DATA_DIR",
"description": "Default directory for LanceDB data and assets",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "MONITOR_DIRECTORIES",
"description": "Comma-separated paths to watch for file changes in server mode",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "LANCEDB_URI",
"description": "LanceDB connection URI (use db:// for cloud or a filesystem path)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "LANCEDB_REGION",
"description": "LanceDB cloud region (if using cloud)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "LANCEDB_API_KEY",
"description": "LanceDB API key (required for LanceDB Cloud)",
"format": "string",
"isRequired": false,
"isSecret": true
},
{
"name": "EMBEDDINGS_PROVIDER",
"description": "Embeddings provider (e.g. ollama, openai, voyageai)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "EMBEDDINGS_MODEL",
"description": "Embeddings model name (provider-specific)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "EMBEDDINGS_VECTOR_DIM",
"description": "Embedding vector dimension (must match model)",
"format": "number",
"isRequired": false,
"isSecret": false
},
{
"name": "QA_PROVIDER",
"description": "Question answering provider (e.g. ollama, openai, anthropic)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "QA_MODEL",
"description": "Question answering model name (provider-specific)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "RESEARCH_PROVIDER",
"description": "Research provider for multi-agent research (e.g. ollama, openai, anthropic)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "RESEARCH_MODEL",
"description": "Research model name for multi-agent research (provider-specific)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "RERANK_PROVIDER",
"description": "Rerank provider (e.g. mixedbread, cohere)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "RERANK_MODEL",
"description": "Rerank model name (provider-specific)",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "CHUNK_SIZE",
"description": "Chunk size for splitting documents (characters)",
"format": "number",
"isRequired": false,
"isSecret": false
},
{
"name": "CONTEXT_CHUNK_RADIUS",
"description": "Number of adjacent chunks to include around search hits",
"format": "number",
"isRequired": false,
"isSecret": false
},
{
"name": "OLLAMA_BASE_URL",
"description": "Base URL for Ollama server",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "VLLM_EMBEDDINGS_BASE_URL",
"description": "Base URL for vLLM embeddings endpoint",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "VLLM_RERANK_BASE_URL",
"description": "Base URL for vLLM rerank endpoint",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "VLLM_QA_BASE_URL",
"description": "Base URL for vLLM QA endpoint",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "VLLM_RESEARCH_BASE_URL",
"description": "Base URL for vLLM research endpoint",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "MARKDOWN_PREPROCESSOR",
"description": "Dotted path or file path to a callable that preprocesses markdown content before chunking",
"format": "string",
"isRequired": false,
"isSecret": false
},
{
"name": "DISABLE_DB_AUTOCREATE",
"description": "If true, refuse to auto-create a new LanceDB database or tables",
"format": "boolean",
"isRequired": false,
"isSecret": false
},
{
"name": "VACUUM_RETENTION_SECONDS",
"description": "Vacuum retention threshold in seconds (default: 60)",
"format": "number",
"isRequired": false,
"isSecret": false
},
{
"name": "OPENAI_API_KEY",
"description": "OpenAI API key (if using OpenAI for embeddings or QA)",
"format": "string",
"isRequired": false,
"isSecret": true
},
{
"name": "VOYAGE_API_KEY",
"description": "VoyageAI API key (if using VoyageAI for embeddings)",
"format": "string",
"isRequired": false,
"isSecret": true
},
{
"name": "ANTHROPIC_API_KEY",
"description": "Anthropic API key (if using Anthropic for QA)",
"format": "string",
"isRequired": false,
"isSecret": true
},
{
"name": "COHERE_API_KEY",
"description": "Cohere API key (if using Cohere for reranking)",
"format": "string",
"isRequired": false,
"isSecret": true
}
]
}
]
},
"transports": [
{
"type": "stdio"
}
]
}