๐ŸŽฏ

uni-agent

๐ŸŽฏSkill

from zrt-ai-lab/opencode-skills

VibeIndex|
What it does

Enables unified cross-protocol agent communication by providing a single API to call and interact with agents across different protocols like ANP, MCP, A2A, and AITP.

๐Ÿ“ฆ

Part of

zrt-ai-lab/opencode-skills(16 items)

uni-agent

Installation

PythonRun Python server
python scripts/uni_cli.py call amap@anp maps_weather '{"city":"ๅŒ—ไบฌ"}'
pip installInstall Python package
pip install anp aiohttp mcp pyyaml
๐Ÿ“– Extracted from docs: zrt-ai-lab/opencode-skills
2Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

็ปŸไธ€ๆ™บ่ƒฝไฝ“ๅ่ฎฎ้€‚้…ๅฑ‚ใ€‚ไธ€ๅฅ— API ่ฐƒ็”จๆ‰€ๆœ‰ Agent ๅ่ฎฎ๏ผˆANP/MCP/A2A/AITP ็ญ‰๏ผ‰ใ€‚ๅฝ“็”จๆˆท้œ€่ฆ่ฐƒ็”จ Agentใ€่ทจๅ่ฎฎ้€šไฟกใ€่ฟžๆŽฅๅทฅๅ…ทๆ—ถ่งฆๅ‘ๆญคๆŠ€่ƒฝใ€‚

Overview

# UniAgent - ็ปŸไธ€ๆ™บ่ƒฝไฝ“ๅ่ฎฎ้€‚้…ๅฑ‚

"Connect Any Agent, Any Protocol"

่ฎพ่ฎก็†ๅฟต

้—ฎ้ข˜

ๅฝ“ๅ‰ Agent ๅ่ฎฎ็”Ÿๆ€ๅ‰ฒ่ฃ‚๏ผš

  • MCP๏ผšAnthropic ็š„ๅทฅๅ…ท่ฐƒ็”จๅ่ฎฎ
  • A2A๏ผšGoogle ็š„ Agent ้—ดๅไฝœๅ่ฎฎ
  • ANP๏ผšๅŽปไธญๅฟƒๅŒ–่บซไปฝ + Agent ็ฝ‘็ปœๅ่ฎฎ
  • AITP๏ผšNEAR ็š„ไบคไบ’ไบคๆ˜“ๅ่ฎฎ
  • ...

ๅผ€ๅ‘่€…้œ€่ฆไธบๆฏไธชๅ่ฎฎๅญฆไน ไธๅŒ็š„ SDKใ€ๅฎž็ŽฐไธๅŒ็š„่ฐƒ็”จ้€ป่พ‘ใ€‚

่งฃๅ†ณๆ–นๆกˆ

UniAgent ๆไพ›็ปŸไธ€ๆŠฝ่ฑกๅฑ‚๏ผŒไธ€ๅฅ— API ้€‚้…ๆ‰€ๆœ‰ๅ่ฎฎ๏ผš

```python

from uni_agent import UniAgent

agent = UniAgent()

# ่ฐƒ็”จ ANP Agent

agent.call("amap@anp", "maps_weather", {"city": "ๅŒ—ไบฌ"})

# ่ฐƒ็”จ MCP Server

agent.call("filesystem@mcp", "read_file", {"path": "/tmp/a.txt"})

# ่ฐƒ็”จ A2A Agent

agent.call("assistant@a2a", "chat", {"message": "hello"})

# ่ฐƒ็”จ AITP Agent๏ผˆๅธฆๆ”ฏไป˜๏ผ‰

agent.call("shop@aitp", "purchase", {"item": "coffee", "amount": 10})

```

ๆžถๆž„่ฎพ่ฎก

```

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”

โ”‚ UniAgent โ”‚

โ”‚ ็ปŸไธ€่ฐƒ็”จๆŽฅๅฃ โ”‚

โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค

โ”‚ call(agent_id, method, params) -> result โ”‚

โ”‚ discover(capability) -> List[Agent] โ”‚

โ”‚ connect(agent_id) -> Connection โ”‚

โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”

โ”‚ Protocol Router โ”‚

โ”‚ ๅ่ฎฎ่ทฏ็”ฑ & ้€‚้… โ”‚

โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”

โ–ผ โ–ผ โ–ผ โ–ผ โ–ผ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”

โ”‚ ANP โ”‚ โ”‚ MCP โ”‚ โ”‚ A2A โ”‚ โ”‚ AITP โ”‚ โ”‚ ... โ”‚

โ”‚Adapterโ”‚ โ”‚Adapterโ”‚ โ”‚Adapterโ”‚ โ”‚Adapterโ”‚ โ”‚Adapterโ”‚

โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

```

ๆ ธๅฟƒๆฆ‚ๅฟต

1. Agent ID ๆ ผๅผ

```

@

็คบไพ‹๏ผš

  • amap@anp # ANP ๅ่ฎฎ็š„้ซ˜ๅพทๅœฐๅ›พ Agent
  • filesystem@mcp # MCP ๅ่ฎฎ็š„ๆ–‡ไปถ็ณป็ปŸ Server
  • gemini@a2a # A2A ๅ่ฎฎ็š„ Gemini Agent
  • shop@aitp # AITP ๅ่ฎฎ็š„ๅ•†ๅบ— Agent

```

2. ็ปŸไธ€่ฐƒ็”จๆŽฅๅฃ

```python

result = agent.call(

agent_id="amap@anp", # Agent ๆ ‡่ฏ†

method="maps_weather", # ๆ–นๆณ•ๅ

params={"city": "ๅŒ—ไบฌ"}, # ๅ‚ๆ•ฐ

timeout=30 # ๅฏ้€‰่ถ…ๆ—ถ

)

```

3. ่ƒฝๅŠ›ๅ‘็Žฐ

```python

# ๅ‘็Žฐๆ‰€ๆœ‰่ƒฝๆไพ›ๅคฉๆฐ”ๆœๅŠก็š„ Agent

agents = agent.discover("weather")

# ่ฟ”ๅ›ž: [

# {"id": "amap@anp", "protocol": "anp", "methods": [...]},

# {"id": "weather@mcp", "protocol": "mcp", "methods": [...]}

# ]

```

4. ๅ่ฎฎ้€‚้…ๅ™จๆŽฅๅฃ

```python

class ProtocolAdapter(ABC):

"""ๅ่ฎฎ้€‚้…ๅ™จๅŸบ็ฑป"""

@abstractmethod

def connect(self, agent_config: dict) -> Connection:

"""ๅปบ็ซ‹่ฟžๆŽฅ"""

pass

@abstractmethod

def call(self, connection: Connection, method: str, params: dict) -> dict:

"""่ฐƒ็”จๆ–นๆณ•"""

pass

@abstractmethod

def discover(self, capability: str) -> List[AgentInfo]:

"""ๅ‘็Žฐ Agent"""

pass

@abstractmethod

def close(self, connection: Connection):

"""ๅ…ณ้—ญ่ฟžๆŽฅ"""

pass

```

ๆ”ฏๆŒ็š„ๅ่ฎฎ

| ๅ่ฎฎ | ็Šถๆ€ | ้€‚้…ๅ™จ | ่ฏดๆ˜Ž |

|------|------|--------|------|

| ANP | โœ… ๅทฒๅฎž็Žฐ | adapters/anp.py | ๅŽปไธญๅฟƒๅŒ–่บซไปฝ + Agent ็ฝ‘็ปœ |

| MCP | โœ… ๅทฒๅฎž็Žฐ | adapters/mcp.py | LLM ๅทฅๅ…ท่ฐƒ็”จ |

| A2A | โœ… ๅทฒๅฎž็Žฐ | adapters/a2a.py | Agent ้—ดๅไฝœ |

| AITP | โœ… ๅทฒๅฎž็Žฐ | adapters/aitp.py | ไบคไบ’ + ไบคๆ˜“ |

| Agent Protocol | โœ… ๅทฒๅฎž็Žฐ | adapters/agent_protocol.py | REST API |

| LMOS | โœ… ๅทฒๅฎž็Žฐ | adapters/lmos.py | ไผไธš็บงๅนณๅฐ |

ไฝฟ็”จๆ–นๅผ

CLI ่ฐƒ็”จ

```bash

# ่ฐƒ็”จ ANP Agent

python scripts/uni_cli.py call amap@anp maps_weather '{"city":"ๅŒ—ไบฌ"}'

# ่ฐƒ็”จ MCP Server

python scripts/uni_cli.py call filesystem@mcp read_file '{"path":"/tmp/a.txt"}'

# ๅ‘็Žฐ Agent

python scripts/uni_cli.py discover weather

# ๅˆ—ๅ‡บๅทฒๆณจๅ†Œ Agent

python scripts/uni_cli.py list

```

Python SDK

```python

from uni_agent import UniAgent

# ๅˆๅง‹ๅŒ–

agent = UniAgent(config_path="config/agents.yaml")

# ่ฐƒ็”จ

result = agent.call("amap@anp", "maps_weather", {"city": "ๅŒ—ไบฌ"})

print(result)

# ๆ‰น้‡่ฐƒ็”จ

results = agent.batch_call([

("amap@anp", "maps_weather", {"city": "ๅŒ—ไบฌ"}),

("amap@anp", "maps_weather", {"city": "ไธŠๆตท"}),

])

```

้…็ฝฎๆ–‡ไปถ

config/agents.yaml

```yaml

agents:

# ANP Agents

- id: amap

protocol: anp

ad_url: https://agent-connect.ai/mcp/agents/amap/ad.json

- id: hotel

protocol: anp

ad_url: https://agent-connect.ai/agents/hotel-assistant/ad.json

# MCP Servers

- id: filesystem

protocol: mcp

command: npx

args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]

- id: github

protocol: mcp

command: npx

args: ["-y", "@modelcontextprotocol/server-github"]

env:

GITHUB_TOKEN: "${GITHUB_TOKEN}"

# A2A Agents

- id: assistant

protocol: a2a

endpoint: https://example.com/.well-known/agent.json

```

config/identity.yaml

```yaml

# ่บซไปฝ้…็ฝฎ๏ผˆ่ทจๅ่ฎฎ้€š็”จ๏ผ‰

identity:

# ANP DID ่บซไปฝ

anp:

did_document: config/did.json

private_key: config/private-key.pem

# A2A ่ฎค่ฏ

a2a:

auth_type: oauth2

client_id: "${A2A_CLIENT_ID}"

client_secret: "${A2A_CLIENT_SECRET}"

```

็›ฎๅฝ•็ป“ๆž„

```

uni-agent/

โ”œโ”€โ”€ SKILL.md # ๆœฌๆ–‡ไปถ

โ”œโ”€โ”€ README.md # ไฝฟ็”จๆ–‡ๆกฃ

โ”œโ”€โ”€ setup.sh # ไธ€้”ฎๅฎ‰่ฃ…

โ”œโ”€โ”€ requirements.txt # Python ไพ่ต–

โ”œโ”€โ”€ config/

โ”‚ โ”œโ”€โ”€ agents.yaml # Agent ๆณจๅ†Œ่กจ

โ”‚ โ”œโ”€โ”€ identity.yaml # ่บซไปฝ้…็ฝฎ

โ”‚ โ””โ”€โ”€ .gitignore

โ”œโ”€โ”€ adapters/

โ”‚ โ”œโ”€โ”€ __init__.py

โ”‚ โ”œโ”€โ”€ base.py # ้€‚้…ๅ™จๅŸบ็ฑป

โ”‚ โ”œโ”€โ”€ anp.py # ANP ้€‚้…ๅ™จ

โ”‚ โ”œโ”€โ”€ mcp.py # MCP ้€‚้…ๅ™จ

โ”‚ โ”œโ”€โ”€ a2a.py # A2A ้€‚้…ๅ™จ

โ”‚ โ””โ”€โ”€ aitp.py # AITP ้€‚้…ๅ™จ

โ”œโ”€โ”€ scripts/

โ”‚ โ””โ”€โ”€ uni_cli.py # CLI ๅทฅๅ…ท

โ””โ”€โ”€ docs/

โ”œโ”€โ”€ architecture.md # ๆžถๆž„ๆ–‡ๆกฃ

โ””โ”€โ”€ adapters.md # ้€‚้…ๅ™จๅผ€ๅ‘ๆŒ‡ๅ—

```

ๆ‰ฉๅฑ•ๆ–ฐๅ่ฎฎ

  1. ๅˆ›ๅปบ้€‚้…ๅ™จๆ–‡ไปถ adapters/new_protocol.py
  2. ็ปงๆ‰ฟ ProtocolAdapter ๅŸบ็ฑป
  3. ๅฎž็Žฐ connectใ€callใ€discoverใ€close ๆ–นๆณ•
  4. ๅœจ adapters/__init__.py ๆณจๅ†Œ

```python

# adapters/new_protocol.py

from .base import ProtocolAdapter

class NewProtocolAdapter(ProtocolAdapter):

protocol_name = "new_protocol"

def connect(self, agent_config):

# ๅฎž็Žฐ่ฟžๆŽฅ้€ป่พ‘

pass

def call(self, connection, method, params):

# ๅฎž็Žฐ่ฐƒ็”จ้€ป่พ‘

pass

# ...

```

ไพ่ต–

```bash

pip install anp aiohttp mcp pyyaml

```

More from this repository10

๐ŸŽฏ
videocut-subtitle๐ŸŽฏSkill

Generates and burns subtitles for videos by transcribing speech, correcting text, enabling user review, and embedding subtitles using FFmpeg.

๐ŸŽฏ
searchnews๐ŸŽฏSkill

I apologize, but I cannot generate a description without seeing the actual code or details of the "searchnews" skill from the repository. Could you provide more context about what the skill does, s...

๐ŸŽฏ
image-service๐ŸŽฏSkill

็”Ÿๆˆๅคšๆจกๆ€ๅ›พๅƒๅค„็†ๆœๅŠก๏ผŒๆ”ฏๆŒๆ–‡็”Ÿๅ›พใ€ๅ›พ็”Ÿๅ›พใ€ๅ›พ็”Ÿๆ–‡ใ€้•ฟๅ›พๆ‹ผๆŽฅ็ญ‰ๅ›พๅƒๅค„็†่ƒฝๅŠ›ใ€‚

๐ŸŽฏ
videocut-clip๐ŸŽฏSkill

Cuts video by executing FFmpeg based on confirmed deletion tasks, looping until zero errors and generating subtitles.

๐ŸŽฏ
mcp-builder๐ŸŽฏSkill

Builds and manages Minecraft Proxy (MCP) configurations with automated setup and deployment capabilities for network infrastructure.

๐ŸŽฏ
deep-research๐ŸŽฏSkill

Performs comprehensive technical research by extracting information, conducting web searches, generating professional reports in Markdown and Word formats, and creating visual infographics.

๐ŸŽฏ
log-analyzer๐ŸŽฏSkill

Analyzes log files, extracting key metrics, identifying patterns, and generating insights to help troubleshoot system performance and detect potential issues.

๐ŸŽฏ
smart-query๐ŸŽฏSkill

Enables secure database querying via SSH tunnel, translating natural language to SQL and exploring table structures with ease.

๐ŸŽฏ
csv-data-summarizer๐ŸŽฏSkill

Automatically analyzes CSV files, generating comprehensive statistical summaries and intelligent visualizations tailored to the specific data type and content.

๐ŸŽฏ
skill-creator๐ŸŽฏSkill

Guides users through creating specialized skills that extend Claude's capabilities with domain expertise, workflows, and tool integrations.