Skip to main content

Define custom tools and serve them via OpenAPI or MCP interfaces

Project description

toolregistry-server

PyPI version Python Version License: MIT

Define custom tools and serve them via OpenAPI or MCP interfaces. Built on ToolRegistry.

Overview

toolregistry-server lets you register Python functions as tools and expose them as services through multiple protocols. It provides:

  • Central Route Table: A unified routing layer that bridges ToolRegistry and protocol adapters
  • OpenAPI Adapter: Expose tools as RESTful HTTP endpoints with automatic OpenAPI schema generation
  • MCP Adapter: Expose tools via the Model Context Protocol for LLM integration
  • Authentication: Built-in Bearer token authentication support
  • CLI: Command-line interface for running servers

Ecosystem

The ToolRegistry ecosystem consists of three packages:

Package Description Repository
toolregistry Core library - Tool model, ToolRegistry, client integration Oaklight/ToolRegistry
toolregistry-server Tool server - define tools and serve via OpenAPI/MCP Oaklight/toolregistry-server
toolregistry-hub Tool collection - Built-in tools, default server configuration Oaklight/toolregistry-hub
toolregistry (core)
       ↓
toolregistry-server (tool server)
       ↓
toolregistry-hub (tool collection + server config)

Installation

Basic Installation

pip install toolregistry-server

With OpenAPI Support

pip install toolregistry-server[openapi]

With MCP Support

pip install toolregistry-server[mcp]

Full Installation

pip install toolregistry-server[all]

Quick Start

Using RouteTable

from toolregistry import ToolRegistry
from toolregistry_server import RouteTable

# Create a registry and register tools
registry = ToolRegistry()

@registry.register
def greet(name: str) -> str:
    """Greet someone by name."""
    return f"Hello, {name}!"

# Create a route table
route_table = RouteTable(registry)

# List all routes
for route in route_table.list_routes():
    print(f"{route.path} -> {route.tool_name}")

Creating an OpenAPI Server

from toolregistry import ToolRegistry
from toolregistry_server import RouteTable
from toolregistry_server.openapi import create_openapi_app

# Setup registry and route table
registry = ToolRegistry()
# ... register tools ...
route_table = RouteTable(registry)

# Create FastAPI app
app = create_openapi_app(route_table)

# Run with uvicorn
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Creating an MCP Server

from toolregistry import ToolRegistry
from toolregistry_server import RouteTable
from toolregistry_server.mcp import create_mcp_server

# Setup registry and route table
registry = ToolRegistry()
# ... register tools ...
route_table = RouteTable(registry)

# Create MCP server
server = create_mcp_server(route_table)

# Run the server
if __name__ == "__main__":
    import asyncio
    asyncio.run(server.run())

Using the CLI

# Start OpenAPI server
toolregistry-server --mode openapi --port 8000

# Start MCP server (stdio)
toolregistry-server --mode mcp

# With authentication
toolregistry-server --mode openapi --auth-token "your-secret-token"

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      ToolRegistry                           │
│                   (tool definitions)                        │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                       RouteTable                            │
│              (central routing layer)                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ RouteEntry  │  │ RouteEntry  │  │ RouteEntry  │  ...    │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────┬───────────────────────────────────┘
                          │
          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ OpenAPI Adapter │ │   MCP Adapter   │ │  gRPC Adapter   │
│   (FastAPI)     │ │   (MCP SDK)     │ │    (future)     │
└─────────────────┘ └─────────────────┘ └─────────────────┘
          │               │               │
          ▼               ▼               ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│  HTTP Clients   │ │   MCP Clients   │ │  gRPC Clients   │
└─────────────────┘ └─────────────────┘ └─────────────────┘

Documentation

Contributing

Contributions are welcome! Please see our Contributing Guide for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Related Projects

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

toolregistry_server-0.1.1.tar.gz (37.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

toolregistry_server-0.1.1-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file toolregistry_server-0.1.1.tar.gz.

File metadata

  • Download URL: toolregistry_server-0.1.1.tar.gz
  • Upload date:
  • Size: 37.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for toolregistry_server-0.1.1.tar.gz
Algorithm Hash digest
SHA256 506497bc6c5f338837d15162f97ff353fd291efe57ab1ca269633e0e4eacd564
MD5 b42171b511bb1e112c1681b7ac5b126f
BLAKE2b-256 82142c0e77fec12224c379277333b817f8dcee78626bf1f83b1c3291653798c9

See more details on using hashes here.

File details

Details for the file toolregistry_server-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for toolregistry_server-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ea51cbcbf7af8997ecb019afcaa022be5a762bd38cb823b5e6cd6e58b5073211
MD5 ab61081c40d12c72dcff3d871f77ed1e
BLAKE2b-256 02582fee9d9656411a52fc24050e8b475f50202e875bb53048a1292a041bf5a1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page