toolfoundation¶
Foundation layer providing canonical schema definitions and protocol-agnostic format conversion for the ApertureStack tool framework.
Packages¶
| Package | Purpose |
|---|---|
model | Canonical MCP tool schema definitions, validation, backend bindings |
adapter | Protocol-agnostic tool format conversion (MCP, OpenAI, Anthropic, A2A, Gemini) |
version | Semantic version parsing, constraints, compatibility matrices |
Installation¶
go get github.com/jonwraymond/toolfoundation@latest
Quick Start¶
Defining a Tool (model package)¶
import (
"github.com/jonwraymond/toolfoundation/model"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
tool := model.Tool{
Namespace: "github",
Tool: mcp.Tool{
Name: "get_repo",
Description: "Fetch repository metadata",
InputSchema: map[string]any{
"type": "object",
"properties": map[string]any{
"owner": map[string]any{"type": "string"},
"repo": map[string]any{"type": "string"},
},
"required": []string{"owner", "repo"},
},
},
Tags: model.NormalizeTags([]string{"GitHub", "repos"}),
}
if err := tool.Validate(); err != nil {
log.Fatal(err)
}
fmt.Println(tool.ToolID()) // "github:get_repo" (or "github:get_repo:1.0.0" when version is set)
Converting Between Formats (adapter package)¶
import "github.com/jonwraymond/toolfoundation/adapter"
// Use the default registry with all built-in adapters
registry := adapter.DefaultRegistry()
result, err := registry.Convert(mcpTool, "mcp", "openai")
if err != nil {
log.Fatal(err)
}
// Check for feature loss warnings
for _, w := range result.Warnings {
log.Printf("Feature loss: %s", w)
}
Versioning Utilities (version package)¶
import "github.com/jonwraymond/toolfoundation/version"
v1 := version.MustParse("v1.2.0")
v2 := version.MustParse("v1.3.1")
if v2.GreaterThan(v1) {
fmt.Println("upgrade available")
}
matrix := version.NewMatrix()
matrix.Add(version.Compatibility{
Component: "toolexec",
MinVersion: version.MustParse("v1.0.0"),
})
ok, msg := matrix.Check("toolexec", v1)
if !ok {
log.Fatal(msg)
}
Key Features¶
- MCP-aligned: Tool type embeds official MCP SDK types
- Protocol-agnostic: Convert between MCP, OpenAI, and Anthropic formats
- Loss visibility: Feature loss during conversion is tracked as warnings
- Minimal dependencies: Foundation has minimal external dependencies
Schema contracts¶
See the dedicated schema reference for field constraints, JSON Schema rules, and recommended patterns:
Schema Validation Policy¶
Schema validation follows JSON Schema 2020-12 by default with draft-07 support. External $ref resolution is disabled to prevent network access. See design notes for details and limitations.