Skip to main content

ToolRegistry: a library for easier function calling and tool use in LLMs

Project description

ToolRegistry

English Version | 中文版

A Python library for managing and executing tools in a structured way.

Features

  • Tool registration and management
  • JSON Schema generation for tool parameters
  • Tool execution and result handling
  • Support for both synchronous and asynchronous tools
  • Support native Python functions and class methods as tools
  • Support multiple MCP transport methods: STDIO, streamable HTTP, SSE, WebSocket, FastMCP instance, etc.
  • Support OpenAPI tools

Full Documentation

Full documentation is available at https://toolregistry.lab.oaklight.cn

API Deprecation (starting 0.4.12)

As of version 0.4.12, the previously deprecated methods ToolRegistry.register_static_tools, ToolRegistry.register_mcp_tools, and ToolRegistry.register_openapi_tools have been REMOVED. Users must update their implementations to use the new methods: ToolRegistry.register_from_class, ToolRegistry.register_from_mcp, and ToolRegistry.register_from_openapi. Please ensure your codebase is compatible with this update for uninterrupted functionality.

Installation

Basic Installation

Install the core package (requires Python >= 3.8):

pip install toolregistry

Installing with Extra Support Modules

Extra modules can be installed by specifying extras in brackets. For example, to install specific extra supports:

pip install toolregistry[mcp,openapi]

Below is a table summarizing available extra modules:

Extra Module Python Requirement Example Command
mcp Python >= 3.10 pip install toolregistry[mcp]
openapi Python >= 3.8 pip install toolregistry[openapi]
langchain Python >= 3.9 pip install toolregistry[langchain]
hub Python >= 3.8 pip install toolregistry[hub]

Hub Tools Installation

Note: As of recent versions, the hub tools have been moved to a separate package toolregistry-hub. You can install hub tools in two ways:

  1. Standalone installation:

    pip install toolregistry-hub
    
  2. Via extras:

    pip install toolregistry[hub]
    

Both methods provide the same functionality. The standalone installation allows you to use hub tools independently or with other compatible libraries.

Examples

OpenAI Implementation

The openai_tool_usage_example.py shows how to integrate ToolRegistry with OpenAI's API.

Cicada Implementation

The cicada_tool_usage_example.py demonstrates how to use ToolRegistry with the Cicada MultiModalModel.

Basic Tool Invocation

This section demonstrates how to invoke a basic tool. Example:

from toolregistry import ToolRegistry

registry = ToolRegistry()

@registry.register
def add(a: float, b: float) -> float:
    """Add two numbers together."""
    return a + b

available_tools = registry.get_available_tools()

print(available_tools) # ['add']

add_func = registry.get_callable('add')
print(type(add_func)) # <class 'function'>
add_result = add_func(1, 2)
print(add_result) # 3

add_func = registry['add']
print(type(add_func)) # <class 'function'>
add_result = add_func(4, 5)
print(add_result) # 9

For more usage examples, please refer to Documentation - Usage

MCP Integration

The ToolRegistry provides first-class support for MCP (Model Context Protocol) tools with multiple transport options:

# transport can be a URL string, script path, transport instance, or MCP instance.
transport = "https://mcphub.url/mcp"  # Streamable HTTP MCP
transport = "http://localhost:8000/sse/test_group"  # Legacy HTTP+SSE
transport = "examples/mcp_related/mcp_servers/math_server.py"  # Local path
transport = {
    "mcpServers": {
        "make_mcp": {
            "command": f"{Path.home()}/mambaforge/envs/toolregistry_dev/bin/python",
            "args": [
                f"{Path.home()}/projects/toolregistry/examples/mcp_related/mcp_servers/math_server.py"
            ],
            "env": {},
        }
    }
}  # MCP configuration dictionary example
transport = FastMCP(name="MyFastMCP")  # FastMCP instance
transport = StreamableHttpTransport(url="https://mcphub.example.com/mcp", headers={"Authorization": "Bearer token"})  # Transport instance with custom headers

registry.register_from_mcp(transport)

# Get all tools' JSON, including MCP tools
tools_json = registry.get_tools_json()

OpenAPI Integration (updated as of 0.4.12)

The register_from_openapi method now accepts two parameters:

  • client_config: a toolregistry.openapi.HttpxClientConfig object that configures the HTTP client used to interact with the API. You can configure the headers, authorization, timeout, and other settings. Allowing greater flexibility than the previous version.
  • openapi_spec: The OpenAPI specification as Dict[str, Any], loaded with a function like load_openapi_spec or load_openapi_spec_async. These functions accept a file path or a URL to the OpenAPI specification or a URL to the base api and return the parsed OpenAPI specification as a dictionary.

Example:

from toolregistry.openapi import HttpxClientConfig, load_openapi_spec

client_config = HttpxClientConfig(base_url="http://localhost:8000")
openapi_spec = load_openapi_spec("./openapi_spec.json")
openapi_spec = load_openapi_spec("http://localhost:8000")
openapi_spec = load_openapi_spec("http://localhost:8000/openapi.json")

registry.register_from_openapi(
    client_config=client_config,
    openapi_spec=openapi_spec
)

# Get all tools' JSON, including OpenAPI tools
tools_json = registry.get_tools_json()

Note

When using the functions load_openapi_spec or load_openapi_spec_async, the following behaviors apply:

  1. Base URL provided: If you specify only a base URL (e.g., http://localhost:8000), the loader will attempt "best effort" auto-discovery to locate the OpenAPI specification file. It checks endpoints such as http://<base_url>/openapi.json or http://<base_url>/swagger.json. If auto-discovery fails, ensure the base URL is accurate and the specification is accessible.

  2. File path provided: If you provide a file path (e.g., ./openapi_spec.json), the function will load the OpenAPI specification directly from the file. Unlike simple direct load, the functionality includes unwinding $ref blocks commonly found in OpenAPI specifications. This ensures that any schema references are fully resolved within the returned dictionary.

LangChain Integration

The LangChain integration module allows ToolRegistry to register and invoke LangChain tools seamlessly, supporting both synchronous and asynchronous calls.

from langchain_community.tools import ArxivQueryRun, PubmedQueryRun
from toolregistry import ToolRegistry

registry = ToolRegistry()

registry.register_from_langchain([ArxivQueryRun(), PubmedQueryRun()])
tools_json = registry.get_tools_json()

Registering Class Tools

Class tools are registered to ToolRegistry using the register_from_class method. This allows developers to extend the functionality of ToolRegistry by creating custom tool classes with reusable methods.

Example:

from toolregistry import ToolRegistry

class StaticExample:
    @staticmethod
    def greet(name: str) -> str:
        return f"Hello, {name}!"

class InstanceExample:
    def __init__(self, name: str):
        self.name = name

    def greet(self, name: str) -> str:
        return f"Hello, {name}! I'm {self.name}."

registry = ToolRegistry()
registry.register_from_class(StaticExample, with_namespace=True)
print(registry.get_available_tools())  # ['static_example.greet']
print(registry["static_example.greet"]("Alice"))  # Hello, Alice!

registry = ToolRegistry()
registry.register_from_class(InstanceExample("Bob"), with_namespace=True)
print(registry.get_available_tools())  # ['instance_example.greet']
print(registry["instance_example.greet"]("Alice"))  # Hello, Alice! I'm Bob.

Hub Tools

Available Tools

Hub tools encapsulate commonly used functionalities as methods in classes. Examples of available hub tools include:

  • Calculator: Basic arithmetic, scientific operations, statistical functions, financial calculations, and more.
  • FileOps: File manipulation like diff generation, patching, verification, merging, and splitting.
  • Filesystem: Comprehensive file system operations such as directory listing, file read/write, path normalization, and querying file attributes.
  • UnitConverter: Extensive unit conversions such as temperature, length, weight, volume, etc.
  • WebSearch: Web search functionality supporting multiple engines like Bing, Google and SearXNG, etc.
  • Fetch: Fetching content from URL.

To register hub tools:

from toolregistry import ToolRegistry
from toolregistry.hub import Calculator

registry = ToolRegistry()
registry.register_from_class(Calculator, with_namespace=True)

# Get available tools list
print(registry.get_available_tools())
# ['calculator-list_allowed_fns', 'calculator-help', 'calculator-evaluate']

Community Contribution

We welcome community contributions of new tool classes to ToolRegistry! If you have designs or implementations for other commonly used tools, feel free to submit them through a Pull Request on the GitHub Repository. Your contributions will help expand the diversity and usability of the tools.

Citation

If you use ToolRegistry in your research or project, please consider cite it as:

@software{toolregistry2025,
  title={ToolRegistry: A Protocol-Agnostic Tool Management Library for OpenAI-Compatible LLM Applications},
  author={Peng Ding},
  year={2025},
  url={https://github.com/Oaklight/ToolRegistry},
  note={A Python library for unified tool registration, execution, and management across multiple protocols in OpenAI-compatible LLM applications}
}

License

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

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-0.4.14a1.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

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

toolregistry-0.4.14a1-py3-none-any.whl (43.2 kB view details)

Uploaded Python 3

File details

Details for the file toolregistry-0.4.14a1.tar.gz.

File metadata

  • Download URL: toolregistry-0.4.14a1.tar.gz
  • Upload date:
  • Size: 38.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for toolregistry-0.4.14a1.tar.gz
Algorithm Hash digest
SHA256 ba1ea3272d4a7681ce9a67c73a22f848d277232ded3d7571a5890622f2c6458d
MD5 0520883870a09c84a4fc8a9b91024afb
BLAKE2b-256 ade61aa5848f609ed324d9c95777c4ca8c98b470afda19d9d280e27527c77313

See more details on using hashes here.

File details

Details for the file toolregistry-0.4.14a1-py3-none-any.whl.

File metadata

File hashes

Hashes for toolregistry-0.4.14a1-py3-none-any.whl
Algorithm Hash digest
SHA256 d990f758d26cb0684c88eda469e6c56555da1bff869026a8c38ee19f071c0896
MD5 546fbf5c41ca7d252d932efd8e765955
BLAKE2b-256 d122a2eba57a432ce3f8f5674ef7302266c5c8f6230305ecf0a355014be55c05

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