Token导航 LogoToken导航

MCP Server · 运维云端

Agent As MCP

raven-skills是一个基于技能的自适应AI代理库,能够自动选择最佳技能或从成功对话中生成新技能,适用于需要智能对话和任务自动化的场景。

stdio官方级别未说明来源级核验工具 4
PythonClaude机器学习Cursor

快速开始

作者 / 组织
raven-ai-esh
提供方
raven-ai-esh

工具数量

4

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

1

仓库热度

收录来源

1 个

MCP World

选型结论

Agent As MCP 属于运维云端类 MCP Server,公开资料标注 4 个工具,通过stdio 本地进程接入,适配 Claude、Cursor,有可以直接复制的安装命令;接入前要先准备 API Key。

分类

运维云端

传输方式

stdio

认证方式

API Key

部署方式

公开资料未说明

安装与配置

安装命令

pip install raven-skills

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 对应的运行时,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 4 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

乌鸦技能

一个使用基于技能的方法构建自适应AI代理的库。代理会自动为任务选择最佳技能,或从成功的对话中生成新技能。

与标准RAG或代理系统不同, raven-skills 实现 通过经验学习:代理记住成功的解决方案,并将其转化为可重用的技能。

主要特点

  • 🎯 自动技能匹配 --通过嵌入相似性找到最合适的技能
  • 🔧 技能生成 --从成功的对话中创造新技能
  • 🧠 内置LLM客户端 --包括所有提示逻辑和SGR(模式引导推理)
  • 🔄 优化 --相似技能的自动合并
  • ⚡ 适应性改进 --修复执行失败的三种策略
  • 💬 对话代理 --带有澄清和工具支持的多回合对话

安装

pip install raven-skills

快速开始

图书馆的设计很简单。你只需要一个OpenAI客户端和一个技能存储。

import asyncio
from openai import AsyncOpenAI
from raven_skills import SkillDialogueAgent, Tool, JSONStorage

# Define a tool (optional)
def get_weather(city: str) -> str:
    return f"Weather in {city}: sunny, 22°C"

weather_tool = Tool(
    name="get_weather",
    description="Get weather forecast for a city",
    parameters={"type": "object", "properties": {"city": {"type": "string"}}},
    function=get_weather,
)

async def main():
    # 1. Initialize
    agent = SkillDialogueAgent(
        client=AsyncOpenAI(),
        storage=JSONStorage("./skills.json"),
        tools=[weather_tool],
        auto_generate_skills=True,
    )

    # 2. Chat with the agent
    response = await agent.chat("What's the weather in Moscow?")
    print(response.message)
    # → "It's sunny in Moscow, 22°C"
    # Agent created skill "Get Weather Forecast" and saved it
    
    # 3. If something goes wrong, provide feedback
    response = await agent.chat("No, that's wrong - I asked about Paris")
    print(response.message)
    # → Agent detects negative feedback, refines skill, retries
    
    # 4. Save refined skill if needed
    if response.skill_refined:
        await agent.save_refined_skill()

if __name__ == "__main__":
    asyncio.run(main())

运作原理

SkillAgent 是唯一的切入点。在内部,它封装了所有LLM复杂性:

  1. 提示和模板:所有系统提示都是预先编写和优化的。
  2. 模式引导推理(SGR)代理不仅生成文本,还填充严格的Pydantic模式。这确保了技能步骤始终采用正确的格式。
  3. 嵌入:通过OpenAI客户端自动生成搜索向量。

无需编写自己的提示或解析器。

技能存储

技能存储使用 SkillStorage 界面。图书馆包括 JSONStorage 用于基于文件的持久性。对于生产环境,您可以实现自己的(例如,Postgres+pgvector)。

定制存储实施

from raven_skills import SkillStorage, Skill

class PostgresStorage(SkillStorage):
    def __init__(self, db_pool):
        self.db = db_pool

    async def save(self, skill: Skill) -> None:
        # Your SQL INSERT ...
        pass

    async def get(self, skill_id: str) -> Skill | None:
        # Your SQL SELECT ...
        pass
        
    async def get_all(self) -> list[Skill]:
        # Get all skills
        pass

    async def delete(self, skill_id: str) -> None:
        # Delete skill
        pass

    async def search_by_embedding(
        self, embedding: list[float], top_k: int = 5, min_score: float = 0.0
    ) -> list[tuple[Skill, float]]:
        # Vector similarity search
        pass

高级功能

诊断和自我纠正

使用SkillDialogueAgent (推荐):只需在对话中提供负面反馈:

# The agent automatically diagnoses and refines
response = await agent.chat("That's wrong, step 2 has an auth error")
# Agent: diagnoses → refines skill → retries automatically

if response.skill_refined:
    await agent.save_refined_skill()

使用SkillAgent (低级):手动诊断和改进:

from raven_skills import SkillAgent

agent = SkillAgent(client=AsyncOpenAI(), storage=storage)

# Execute skill
execution = await agent.execute(skill, task)

# Diagnose issue
action = await agent.diagnose(
    skill=skill,
    task=task,
    result=execution,
    user_feedback="Step 2 threw an auth error",
)

print(f"Diagnosis: {action.diagnosis}")
# e.g.: "wrong_steps" → "Error in skill steps"

# Refine (creates new version of skill)
refined_skill = await agent.refine(skill, action)

合并与优化

随着时间的推移,重复的技能可能会出现。使用 SkillAgent 对于优化任务:

from raven_skills import SkillAgent, JSONStorage
from openai import AsyncOpenAI

# SkillAgent provides low-level skill operations including optimization
agent = SkillAgent(
    client=AsyncOpenAI(),
    storage=JSONStorage("./skills.json"),
)

# Find similar skills and merge them
results = await agent.optimize(similarity_threshold=0.95, dry_run=False)

for originals, merged in results:
    print(f"Merged {len(originals)} skills into '{merged.name}'")

数据模型

技能

@dataclass
class Skill:
    id: str
    name: str                  # Name
    metadata: SkillMetadata    # description, goal, keywords, embedding
    steps: list[SkillStep]     # Execution steps
    version: int               # Skill version
    parent_id: str | None      # Parent ID (if forked)

任务

@dataclass
class Task:
    id: str
    query: str                # Original user query
    key_aspects: list[str]    # Key aspects extracted by LLM
    embedding: list[float]    # Query vector

对话代理

对于包含澄清问题的交互式场景,请使用 SkillDialogueAgent:

from raven_skills import SkillDialogueAgent, Tool

# Define tools
weather_tool = Tool(
    name="get_weather",
    description="Get weather forecast",
    parameters={"type": "object", "properties": {"city": {"type": "string"}}},
    function=lambda city: f"Weather in {city}: +10°C",
)

agent = SkillDialogueAgent(
    client=AsyncOpenAI(),
    storage=storage,
    tools=[weather_tool],
    auto_generate_skills=True,  # Generate skills automatically
)

# Dialogue with clarifications
response = await agent.chat("What's the weather?")
# Agent: "Which city?" (needs_user_input=True)

response = await agent.chat("Moscow")
# Agent: "Weather in Moscow: +10°C" (called get_weather)

# The "weather" skill is now saved and will be reused

反馈和错误纠正

当代理出错时,提供反馈:

# Automatic detection: just tell what's wrong
response = await agent.chat("No, you missed the second sheet")
# Agent detects negative feedback → refines skill → retries

# Or use explicit API
response = await agent.feedback("negative", "You missed the second sheet")
# → Agent diagnoses error, refines skill, and retries

# Save improved skill after successful retry
if response.skill_refined:
    await agent.save_refined_skill()

# Positive feedback
await agent.feedback("positive")

LangChain/LangGraph集成

该库与LangChain生态系统完全兼容。

LangChain工具

from raven_skills.integrations import SkillMatcherTool, SkillDialogueTool

# As a tool in a LangChain agent
skill_tool = SkillMatcherTool(agent=skill_agent)
dialogue_tool = SkillDialogueTool(agent=dialogue_agent)

# Use in AgentExecutor or chains
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=..., tools=[skill_tool])

LangChain可运行(LCEL)

from raven_skills.integrations import SkillAgentRunnable

# As a Runnable in LCEL chain
skill_runnable = SkillAgentRunnable(agent=dialogue_agent)

chain = prompt | skill_runnable | output_parser
result = await chain.ainvoke({"query": "Book a restaurant"})

LangGraph状态机

from langgraph.graph import StateGraph
from raven_skills.integrations import (
    create_skill_node,
    create_skill_router,
    SkillGraphState,
)

# Create state graph
graph = StateGraph(SkillGraphState)

# Add node with our agent
skill_node = create_skill_node(dialogue_agent)
graph.add_node("skill_agent", skill_node)

# Routing: if user input needed — wait, otherwise complete
router = create_skill_router(
    needs_input_node="wait_for_input",
    complete_node="__end__",
)
graph.add_conditional_edges("skill_agent", router)

# Compile and run
app = graph.compile()
result = await app.ainvoke({"current_message": "Order pizza"})

可用适配器

适配器说明
SkillMatcherTool用于技能匹配和执行的LangChain工具
SkillDialogueTool对话代理的LangChain工具
SkillAgentRunnableLCEL可用于链条
create_skill_node()LangGraph的节点工厂
create_skill_router()LangGraph中条件边的路由器
SkillGraphStateLangGraph的TypedDict状态模式

MCP 服务器

将raven技能作为MCP服务器运行,以便与Claude、Cursor和其他MCP客户端一起使用。

安装

pip install raven-skills[mcp]

快速开始

# Default server with OpenAI
python -m raven_skills serve

# With Ollama
python -m raven_skills serve --base-url http://localhost:11434/v1 --model llama3

所有CLI选项

python -m raven_skills serve [APP] [OPTIONS]

# APP (optional): Custom app module:variable (e.g., my_app:mcp)

Options:
  --port PORT              HTTP port (default: 8000)
  --transport {http,stdio} Transport type (default: http)
  --storage PATH           Skills JSON file (default: ./skills.json)
  --model MODEL            LLM model (default: gpt-4o-mini)
  --embedding-model MODEL  Embedding model (default: text-embedding-3-small)
  --base-url URL           OpenAI-compatible API URL
  --api-key KEY            API key (overrides OPENAI_API_KEY)
  --embedding-base-url URL Separate URL for embeddings

自定义应用程序(FastAPI风格)

在Python中创建完全配置的服务器,使用CLI运行:

# my_server.py
from openai import AsyncOpenAI
from mcp.server.fastmcp import FastMCP
from raven_skills import SkillDialogueAgent, Tool, JSONStorage

# 1. Configure your tools
def get_weather(city: str) -> str:
    return f"Weather in {city}: sunny, 22°C"

def search_restaurants(location: str, cuisine: str = "any") -> str:
    return f"Found 5 {cuisine} restaurants near {location}"

tools = [
    Tool(
        name="get_weather",
        description="Get current weather",
        parameters={"type": "object", "properties": {"city": {"type": "string"}}},
        function=get_weather,
    ),
    Tool(
        name="search_restaurants",
        description="Find restaurants",
        parameters={"type": "object", "properties": {
            "location": {"type": "string"},
            "cuisine": {"type": "string"},
        }},
        function=search_restaurants,
    ),
]

# 2. Configure client and storage
client = AsyncOpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
storage = JSONStorage("./my-skills.json")

# 3. Create agent with everything configured
agent = SkillDialogueAgent(
    client=client,
    storage=storage,
    tools=tools,
    llm_model="llama3",
    embedding_model="bge-m3:latest",
    auto_generate_skills=True,
)

# 4. Create MCP server and expose agent
mcp = FastMCP(name="my-skills-server")

@mcp.tool()
async def chat(message: str) -> str:
    """Chat with the skill agent."""
    response = await agent.chat(message)
    return response.message

@mcp.tool()
async def list_skills() -> list[dict]:
    """List all learned skills."""
    skills = await storage.get_all()
    return [{"name": s.name, "description": s.metadata.description} for s in skills]

@mcp.tool()
async def reset_conversation() -> str:
    """Reset the conversation state."""
    agent.reset()
    return "Conversation reset"

运行它:

python -m raven_skills serve my_server:mcp --port 9000

可用工具

工具说明
execute_skill执行查询的技能(自动匹配或使用特定技能)
list_skills列出所有可用技能
create_skill手动创建新技能
search_skills语义相似度搜索技巧

可用资源

资源URI描述
技能库skills://library所有技能的JSON数组
技能详情skills://skill/{id}单项技能详情

Claude桌面集成

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "raven-skills": {
      "command": "python",
      "args": ["-m", "raven_skills", "serve", "--transport", "stdio"]
    }
  }
}

许可证

Apache 2.0

工具与能力

工具数量

4

资源数量

0

提示词数量

0

能力标签

自适应AIPython本地部署技能库对话代理机器学习任务自动化

支持客户端

ClaudeCursor

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

看服务状态

查询容器、日志和监控指标,定位异常。

执行部署变更

在权限范围内触发发布、回滚和环境切换。

核对资源用量

汇总用量,找出闲置和超额的部分。

选择建议

值得选的地方

  • 只提供 4 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 已经适配 Claude、Cursor,换客户端不用重新研究配置。

先想清楚的地方

  • stdio 方式要求本地装好 运行环境,换机器要重新装一遍。
  • 需要自备API Key,没有凭据没法直接试。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在运维云端场景里让模型直接调用外部能力的人。
  • 已经在用 Claude 的用户,接入路径最短。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 暂时拿不到API Key的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Agent As MCP

MCP World · 本页

4stdio有1 个2026-05-17
Ui Tars Desktop 8a825770

MCP World

0stdio有1 个2026-05-17
Elie222 MCP

MCP World

0未说明未标注1 个2026-05-17
Arizeai Phoenix MCP

MCP World

0stdio有3 个2026-05-17
Unity MCP 87ee506e

MCP World

42HTTP有2 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Agent As MCP 怎么安装?

公开资料给出的安装命令是 pip install raven-skills,运行环境为 未标注。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Agent As MCP 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

Agent As MCP 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Agent As MCP 需要 API Key 吗?

公开资料标注的认证方式是API Key,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

Agent As MCP 支持哪些客户端?

公开资料标注支持 Claude、Cursor;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP