A file-based resource plugin for UTCP. This plugin allows you to define tools that return the content of a specified local file.
- Local File Content: Define tools that read and return the content of local files.
- UTCP Manual Discovery: Load tool definitions from local UTCP manual files in JSON or YAML format.
- OpenAPI Support: Automatically converts local OpenAPI specs to UTCP tools with optional authentication.
- Static & Simple: Ideal for returning mock data, configuration, or any static text content from a file.
- Version Control: Tool definitions and their corresponding content files can be versioned with your code.
- No File Authentication: Designed for simple, local file access without authentication for file reading.
- Tool Authentication: Supports authentication for generated tools from OpenAPI specs via
auth_tools.
pip install utcp-fileThe File plugin operates in two main ways:
- Tool Discovery (
register_manual): It can read a standard UTCP manual file (e.g.,my-tools.json) to learn about available tools. This is how theUtcpClientdiscovers what tools can be called. - Tool Execution (
call_tool): When you call a tool, the plugin looks at thetool_call_templateassociated with that tool. It expects afiletemplate, and it will read and return the entire content of thefile_pathspecified in that template.
Important: The call_tool function does not use the arguments you pass to it. It simply returns the full content of the file defined in the tool's template.
Here is a complete example demonstrating how to define and use a tool that returns the content of a file.
First, create a file with some content that you want your tool to return.
./mock_data/user.json:
{
"id": 123,
"name": "John Doe",
"email": "john.doe@example.com"
}Next, define a UTCP manual that describes your tool. The tool_call_template must be of type file and point to the content file you just created.
./manuals/local_tools.json:
{
"manual_version": "1.0.0",
"utcp_version": "1.0.2",
"tools": [
{
"name": "get_mock_user",
"description": "Returns a mock user profile from a local file.",
"tool_call_template": {
"call_template_type": "file",
"file_path": "./mock_data/user.json"
}
}
]
}Finally, use the UtcpClient to load the manual and call the tool.
import asyncio
from utcp.utcp_client import UtcpClient
async def main():
# Create a client, providing the path to the manual.
# The file plugin is used automatically for the "file" call_template_type.
client = await UtcpClient.create(config={
"manual_call_templates": [{
"name": "local_file_tools",
"call_template_type": "file",
"file_path": "./manuals/local_tools.json"
}]
})
# List the tools to confirm it was loaded
tools = await client.list_tools()
print("Available tools:", [tool.name for tool in tools])
# Call the tool. The result will be the content of './mock_data/user.json'
result = await client.call_tool("local_file_tools.get_mock_user", {})
print("\nTool Result:")
print(result)
if __name__ == "__main__":
asyncio.run(main())Available tools: ['local_file_tools.get_mock_user']
Tool Result:
{
"id": 123,
"name": "John Doe",
"email": "john.doe@example.com"
}
- Mocking: Return mock data for tests or local development without needing a live server.
- Configuration: Load static configuration files as tool outputs.
- Templates: Retrieve text templates (e.g., for emails or reports).
- Main UTCP Documentation
- Core Package Documentation
- HTTP Plugin - For calling real web APIs.
- Text Plugin - For direct text content (browser-compatible).
- CLI Plugin - For executing command-line tools.