スキル一覧に戻る
baglett

add-tool

by baglett

0🍴 0📅 2026年1月21日
GitHubで見るManusで実行

SKILL.md


name: add-tool description: Add a new tool to an existing backend agent. Use when adding tool to agent, creating new agent capability, extending agent functionality, or when user says "add tool", "new tool", "agent capability", or "extend agent". allowed-tools: Read, Edit, Grep

Add Tool to Agent

This skill adds a new tool to an existing agent following the established patterns.

Prerequisites

Before adding a tool, gather:

  1. Target agent (which agent file to modify)
  2. Tool name (snake_case, e.g., search_messages)
  3. Tool purpose (what it does)
  4. Parameters (inputs the tool accepts)
  5. Return value (what the tool returns)

Steps

1. Add Tool Definition

Add to TOOL_DEFINITIONS in the agent file:

{
    "name": "tool_name",
    "description": "Detailed description. Be specific so Claude knows when to use it.",
    "input_schema": {
        "type": "object",
        "properties": {
            "param1": {
                "type": "string",
                "description": "What this parameter is for",
            },
            "param2": {
                "type": "integer",
                "description": "What this parameter is for",
                "minimum": 1,
                "maximum": 100,
            },
            "optional_param": {
                "type": "boolean",
                "description": "Optional parameter with default",
            },
        },
        "required": ["param1"],
    },
},

2. Add Tool Handler

Add case to the _handle_tool method's match statement:

case "tool_name":
    result = await self._tool_name(**tool_input)

3. Implement Tool Method

Add the implementation method:

async def _tool_name(
    self,
    param1: str,
    param2: int = 10,
    optional_param: bool = False,
) -> dict[str, Any]:
    """
    Brief description of what this tool does.

    Args:
        param1: Description
        param2: Description with default
        optional_param: Description

    Returns:
        Result dictionary
    """
    # If calling MCP server:
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{self.mcp_base_url}/tools/tool_name",
            json={
                "param1": param1,
                "param2": param2,
                "optional_param": optional_param,
            },
            timeout=30.0,
        )
        response.raise_for_status()
        return response.json()

4. Update System Prompt

Add tool description to SYSTEM_PROMPT:

### tool_name
Use this tool when {specific situation}. Provide {required params}.
Returns {what it returns}.

Tool Schema Reference

Supported Types

TypeJSON SchemaPython Type
String"type": "string"str
Integer"type": "integer"int
Number"type": "number"float
Boolean"type": "boolean"bool
Array"type": "array", "items": {...}list
Object"type": "object", "properties": {...}dict

Constraints

# String constraints
"minLength": 1,
"maxLength": 100,
"pattern": "^[a-z]+$",
"enum": ["option1", "option2"],

# Number constraints
"minimum": 0,
"maximum": 100,
"exclusiveMinimum": 0,
"multipleOf": 5,

# Array constraints
"minItems": 1,
"maxItems": 10,
"uniqueItems": True,

Checklist

After adding, verify:

  • Tool definition added to TOOL_DEFINITIONS
  • Case added to _handle_tool match statement
  • Implementation method created with proper typing
  • System prompt updated with tool description
  • Tool works with MCP server (if applicable)
  • Error handling returns structured error dict

Common Patterns

MCP Tool Call

async def _tool_name(self, param: str) -> dict:
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{self.mcp_base_url}/tools/tool_name",
            json={"param": param},
            timeout=30.0,
        )
        response.raise_for_status()
        return response.json()

Database Operation

async def _tool_name(self, param: str) -> dict:
    async with self.db_session_factory() as session:
        result = await some_service.do_operation(session, param)
        return {"success": True, "data": result}

Error Handling

async def _tool_name(self, param: str) -> dict:
    try:
        # ... operation ...
        return {"success": True, "data": result}
    except SomeError as e:
        return {"error": True, "message": str(e)}

Reference

  • .claude/rules/backend/agents.md - Agent patterns and anti-patterns

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です