Skip to content

Release Notes - v0.6.0

Release Date: 2026-04-26

Overview

This release introduces OmniSkill - a unified skill infrastructure for AI agents in Go. The new skill/ package provides foundational types for defining skills, tools, and parameters that can be used across different agent frameworks.

This release also renames the project from MCPKit to OmniSkill to reflect its expanded scope beyond MCP.

Installation

go get github.com/plexusone/omniskill@v0.6.0

Requires Go 1.26+ and MCP Go SDK v1.5.0+.

Highlights

  • Project renamed from MCPKit to OmniSkill
  • New skill/ package with unified skill infrastructure
  • Tool interface for defining callable tools with parameters
  • Parameter type with JSON Schema-compatible definitions
  • Registry for managing skills and discovering tools
  • BaseSkill for easy skill implementation

What's New

Skill Interface

The skill.Skill interface defines the contract for agent skills:

type Skill interface {
    Name() string
    Description() string
    Tools() []Tool
    Init(ctx context.Context) error
    Close() error
}

Tool Interface

Tools are callable units with parameters and handlers:

type Tool interface {
    Name() string
    Description() string
    Parameters() map[string]Parameter
    Call(ctx context.Context, params map[string]any) (any, error)
}

Creating Tools

Use skill.NewTool() to create tools:

import "github.com/plexusone/omniskill/skill"

greetTool := skill.NewTool(
    "greet",
    "Greet a user by name",
    map[string]skill.Parameter{
        "name": {
            Type:        "string",
            Description: "The name to greet",
            Required:    true,
        },
    },
    func(ctx context.Context, params map[string]any) (any, error) {
        name := params["name"].(string)
        return fmt.Sprintf("Hello, %s!", name), nil
    },
)

Parameter Definition

Parameters use JSON Schema-compatible types:

type Parameter struct {
    Type        string            // "string", "number", "integer", "boolean", "array", "object"
    Description string            // Human-readable description
    Required    bool              // Whether the parameter is required
    Default     any               // Default value if not provided
    Enum        []any             // Allowed values
    Items       *Parameter        // For array types
    Properties  map[string]Parameter // For object types
}

BaseSkill Helper

For simple skills, use the BaseSkill struct:

type MySkill struct {
    skill.BaseSkill
}

func NewMySkill() *MySkill {
    return &MySkill{
        BaseSkill: skill.BaseSkill{
            SkillName:        "my-skill",
            SkillDescription: "Does something useful",
            SkillTools:       []skill.Tool{...},
        },
    }
}

Registry

The registry/ package provides skill and tool management:

import "github.com/plexusone/omniskill/registry"

r := registry.New()
r.Register(mySkill)

// Find tools
tool, skill, ok := r.FindTool("greet")

// List all tools
tools := r.ListTools()

Package Structure

github.com/plexusone/omniskill
├── skill/           # Core skill types
│   ├── skill.go     # Skill interface
│   ├── tool.go      # Tool interface and FuncTool
│   └── parameter.go # Parameter type with JSON Schema conversion
├── registry/        # Skill registry
│   └── registry.go  # Registration, lookup, lifecycle
├── mcp/             # MCP integration
│   ├── runtime/     # MCP server runtime
│   ├── client/      # MCP client
│   └── oauth2/      # OAuth 2.1 server
└── doc.go           # Package documentation

Breaking Changes

Module Path Change

// Before (v0.5.x)
import "github.com/plexusone/mcpkit/runtime"
import "github.com/plexusone/mcpkit/client"

// After (v0.6.0)
import "github.com/plexusone/omniskill/mcp/runtime"
import "github.com/plexusone/omniskill/mcp/client"

Quick Migration Script

# In your project directory
find . -name "*.go" -exec sed -i '' \
  -e 's|github.com/plexusone/mcpkit/runtime|github.com/plexusone/omniskill/mcp/runtime|g' \
  -e 's|github.com/plexusone/mcpkit/client|github.com/plexusone/omniskill/mcp/client|g' \
  -e 's|github.com/plexusone/mcpkit/oauth2|github.com/plexusone/omniskill/mcp/oauth2|g' \
  -e 's|github.com/plexusone/mcpkit|github.com/plexusone/omniskill|g' {} \;
go mod tidy

Use Cases

Agent Framework Integration

OmniSkill skills integrate with agent frameworks like OmniAgent:

import (
    "github.com/plexusone/omniagent/agent"
    "github.com/plexusone/omniskill/skill"
)

// Create a skill
mySkill := &skill.BaseSkill{
    SkillName:        "calculator",
    SkillDescription: "Math operations",
    SkillTools:       []skill.Tool{addTool, multiplyTool},
}

// Register with agent
agent, err := agent.New(config,
    agent.WithCompiledSkill(mySkill),
)

MCP Server with Skills

Skills can be exposed as MCP tools:

import (
    "github.com/plexusone/omniskill/mcp/runtime"
    "github.com/plexusone/omniskill/skill"
)

rt := runtime.New(impl, nil)

// Add tools from a skill
for _, tool := range mySkill.Tools() {
    rt.AddToolHandler(convertToMCPTool(tool), makeHandler(tool))
}

Contributors

  • John Wang
  • Claude Opus 4.5