MCP server registry
This commit is contained in:
parent
09528221b5
commit
c9fc0cd750
3 changed files with 292 additions and 0 deletions
35
.github/workflows/publish-mcp.yml
vendored
Normal file
35
.github/workflows/publish-mcp.yml
vendored
Normal 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
4
.gitignore
vendored
|
|
@ -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
253
server.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in a new issue