Foundation layer for the ApertureStack AI tool ecosystem.
go get github.com/jonwraymond/toolfoundation| Package | Description |
|---|---|
model |
Canonical MCP tool schema definitions and validation |
adapter |
Protocol-agnostic tool format conversion (MCP, OpenAI, Anthropic) |
version |
Semantic versioning, constraints, compatibility matrices |
import (
"github.com/jonwraymond/toolfoundation/model"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
tool := model.Tool{
Namespace: "github",
Tool: mcp.Tool{
Name: "list_repos",
Description: "List repositories for a user",
InputSchema: map[string]any{
"type": "object",
"properties": map[string]any{
"username": map[string]any{"type": "string"},
},
"required": []string{"username"},
},
},
Version: "1.0.0",
}
if err := tool.Validate(); err != nil {
log.Fatal(err)
}import "github.com/jonwraymond/toolfoundation/adapter"
registry := adapter.DefaultRegistry()
// Convert MCP tool to OpenAI format
result, err := registry.Convert(tool, "mcp", "openai")
if err != nil {
log.Fatal(err)
}
// Check for feature loss warnings
for _, w := range result.Warnings {
log.Printf("Warning: %s", w)
}
openaiTool := result.Tool.(*adapter.OpenAITool)import "github.com/jonwraymond/toolfoundation/version"
v := version.MustParse("1.5.0")
constraint, _ := version.ParseConstraint("^1.0.0")
if constraint.Check(v) {
fmt.Println("Version is compatible")
}- MCP-aligned: Tool type embeds official MCP SDK types
- Protocol-agnostic: Convert between MCP, OpenAI, and Anthropic formats
- Feature loss visibility: Warnings when target format lacks source features
- JSON Schema validation: Built-in schema validation (2020-12 and draft-07)
- Minimal dependencies: Foundation layer with minimal external dependencies
MIT License - see LICENSE