返回市场
MCP图像处理服务器

MCP图像处理服务器

作者:ramonlimaramos7 星标更新:2025-04-19

项目介绍

<picture> <img alt="" src="./static/image.png" width="600" style="background: transparent;"> </picture> <h1 align="center">用于Elixir的统一MCP客户端库</h1>

License Elixir Version Hex.pm Version Hex.pm Downloads

🌐 Mcpixir 是一种开源方式,可以连接任意LLM到任意MCP服务器,并构建具有工具访问权限的自定义代理,无需使用闭源或应用程序客户端。

💡 让开发者轻松地将任意LLM连接到工具,如网络浏览、文件操作等。

功能

✨ 主要功能

功能描述
🔄 易用性创建你的第一个MCP代理只需6行代码
🤖 LLM灵活性支持任何支持工具调用的LLM(OpenAI、Anthropic等)
🌐 HTTP支持直接连接到运行在特定HTTP端口上的MCP服务器
⚙️ 动态服务器选择代理可以从可用池中动态选择最合适的MCP服务器来完成给定任务
🧩 多服务器支持在单个代理中同时使用多个MCP服务器
🛡️ 工具限制限制潜在危险的工具,如文件系统或网络访问

快速开始

mix.exs中的依赖项列表中添加mcpixir

def deps do
  [
    {:mcpixir, "~> 0.1.0"}
  ]
end

或者从源码安装:

git clone https://github.com/yourusername/mcpixir.git
cd mcpixir
mix deps.get
mix compile

配置LLM提供商

Mcpixir与各种LLM提供商兼容。你需要在应用中配置首选的LLM。将你要使用的提供商的API密钥添加到环境变量中:

export OPENAI_API_KEY=your_openai_key_here
export ANTHROPIC_API_KEY=your_anthropic_key_here

重要:只有支持工具调用能力的模型才能与Mcpixir一起使用。确保你选择的模型支持函数调用或工具使用。

启动你的代理:

# 创建配置字典
config = %{
  mcpServers: %{
    playwright: %{
      command: "npx",
      args: ["@playwright/mcp@latest"],
      env: %{
        DISPLAY: ":1"
      }
    }
  }
}

# 从配置字典创建MCP客户端
client = Mcpixir.new_client(config)

# 配置LLM
llm_config = %{
  provider: :openai,
  model: "gpt-4o"
}

# 创建代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client
})

# 运行查询
{:ok, result, updated_agent} = Mcpixir.run(agent, "找到旧金山最好的餐厅")
IO.puts("\n结果: #{result}")

你也可以从配置文件中添加服务器配置,如下所示:

config_path = Path.join("path/to", "browser_mcp.json")
{:ok, config_data} = File.read(config_path)
{:ok, config} = Jason.decode(config_data)

client = Mcpixir.new_client(config)

示例配置文件(browser_mcp.json):

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"],
      "env": {
        "DISPLAY": ":1"
      }
    }
  }
}

对于其他设置、模型等,请参阅文档。

示例用例

使用Playwright进行网络浏览

# 创建配置
config = %{
  mcpServers: %{
    playwright: %{
      command: "npx",
      args: ["@playwright/mcp@latest"],
      env: %{
        DISPLAY: ":1"
      }
    }
  }
}

# 创建MCP客户端
client = Mcpixir.new_client(config)

# 配置LLM
llm_config = %{
  provider: :openai,
  model: "gpt-4o"
  # 其他模型:
  # provider: :anthropic, model: "claude-3-5-sonnet"
  # provider: :groq, model: "llama3-8b-8192"
}

# 创建代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client
})

# 运行查询
{:ok, result, updated_agent} = Mcpixir.run(agent, "找到旧金山最好的餐厅,使用谷歌搜索")
IO.puts("\n结果: #{result}")

# 确保正确清理资源
Mcpixir.Client.stop_all_sessions(client)

Airbnb搜索

# 创建配置,包括Airbnb
config = %{
  mcpServers: %{
    airbnb: %{
      command: "npx",
      args: ["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"]
    }
  }
}

# 创建MCP客户端
client = Mcpixir.new_client(config)

# 配置LLM
llm_config = %{
  provider: :anthropic,
  model: "claude-3-5-sonnet"
}

# 创建代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client
})

# 运行查询以搜索住宿
query = """
为我找一个适合两个成人入住的地方,在巴塞罗那住一个星期,八月份。我更喜欢有游泳池且评价好的地方。显示前三选项。
"""

{:ok, result, updated_agent} = Mcpixir.run(agent, query)
IO.puts("\n结果: #{result}")

# 确保正确清理资源
Mcpixir.Client.stop_all_sessions(client)

示例配置文件(airbnb_mcp.json):

{
  "mcpServers": {
    "airbnb": {
      "command": "npx",
      "args": ["-y", "@openbnb/mcp-server-airbnb"]
    }
  }
}

Blender 3D创作

# 创建配置,包括Blender
config = %{
  mcpServers: %{
    blender: %{
      command: "uvx",
      args: ["blender-mcp"]
    }
  }
}

# 创建MCP客户端
client = Mcpixir.new_client(config)

# 配置LLM
llm_config = %{
  provider: :anthropic,
  model: "claude-3-5-sonnet"
}

# 创建代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client
})

# 运行查询
{:ok, result, updated_agent} = Mcpixir.run(agent, "创建一个软材料的充气立方体,并有一个平面作为地面。")
IO.puts("\n结果: #{result}")

# 确保正确清理资源
Mcpixir.Client.stop_all_sessions(client)

配置选项

MCP-Use支持从配置文件初始化,使管理和切换不同的MCP服务器设置变得容易:

# 从文件加载配置
config_path = Path.join("path/to", "mcp-config.json")
{:ok, config_data} = File.read(config_path)
{:ok, config} = Jason.decode(config_data)

# 从配置创建MCP客户端
client = Mcpixir.new_client(config)

# 创建会话
{:ok, client, session} = Mcpixir.Client.create_session(client, "http://localhost:8000")

# 使用会话...

# 完成后断开连接
Mcpixir.Client.stop_session(client, session.id)

HTTP连接示例

Mcpixir支持HTTP连接,允许你连接到运行在特定HTTP端口上的MCP服务器。此功能特别适用于集成基于Web的MCP服务器。

这里是一个如何使用HTTP连接功能的例子:

# 配置HTTP连接
config = %{
  mcpServers: %{
    http: %{
      url: "http://localhost:8931/sse"
    }
  }
}

# 创建MCP客户端
client = Mcpixir.new_client(config)

# 配置LLM
llm_config = %{
  provider: :openai,
  model: "gpt-4o"
}

# 创建代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client
})

# 运行查询
{:ok, result, updated_agent} = Mcpixir.run(agent, "找到旧金山最好的餐厅,使用谷歌搜索")
IO.puts("\n结果: #{result}")

这个例子演示了如何连接到运行在特定HTTP端口上的MCP服务器。确保在运行此示例之前启动你的MCP服务器。

多服务器支持

Mcpixir允许配置和同时连接到多个MCP服务器,使用Mcpixir.Client。这使得需要来自不同服务器的工具的复杂工作流程成为可能,例如结合网络浏览和文件操作或3D建模。

配置

你可以在配置文件中配置多个服务器:

{
  "mcpServers": {
    "airbnb": {
      "command": "npx",
      "args": ["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"]
    },
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"],
      "env": {
        "DISPLAY": ":1"
      }
    }
  }
}

使用

Mcpixir.Client模块提供了管理连接到多个服务器的功能。在创建代理时,你可以提供配置了多个服务器的客户端。

默认情况下,代理将有权访问所有已配置服务器的工具。如果你需要针对特定任务指定特定服务器,可以在创建代理时指定服务器参数。

# 创建配置了多个服务器的客户端
config = load_multi_server_config()
client = Mcpixir.new_client(config)

# 示例:运行一个可能使用来自两个服务器的工具的查询
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client
})

# 结合不同能力的查询
query = """
在Airbnb上搜索巴塞罗那的好住处,
然后使用谷歌查找附近的餐馆和景点。
"""

{:ok, result, _updated_agent} = Mcpixir.run(agent, query)

动态服务器选择(服务器管理器)

为了提高效率并减少代理在处理来自不同服务器的许多工具时的混淆,你可以利用内置的服务器管理器功能。

启用后,代理将根据LLM为特定步骤选择的工具智能地选择正确的MCP服务器。这减少了不必要的连接,并确保代理使用适当的工具来完成任务。

# 创建配置了多个服务器的客户端
config = load_multi_server_config()
client = Mcpixir.new_client(config)

# 创建启用了服务器管理器的代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client,
  use_server_manager: true  # 启用服务器管理器
})

# 运行一个使用多个服务器工具的查询
{:ok, result, _updated_agent} = Mcpixir.run(agent, """
在Airbnb上搜索巴塞罗那的好住处,
然后使用谷歌查找附近的餐馆和景点。
""")

工具访问控制

MCP-Use允许你限制代理可以访问的工具,提供更好的安全性和对代理能力的控制:

# 创建客户端
config = load_config()
client = Mcpixir.new_client(config)

# 创建具有受限工具的代理
{:ok, agent} = Mcpixir.new_agent(%{
  llm: llm_config,
  client: client,
  disallowed_tools: ["file_system", "network"]  # 限制潜在危险的工具
})

# 运行具有受限工具访问的查询
{:ok, result, _updated_agent} = Mcpixir.run(agent, "找到旧金山最好的餐厅")

运行示例

我们提供了一组Mix任务来展示库的不同方面。这些任务使用真实的LLM和MCP服务器来展示全部功能。

Mix任务

运行mix mcp查看所有可用示例:

mix mcpixir

可用示例:

  • mix mcpixir.chat - 带有工具的简单聊天交互
  • mix mcpixir.airbnb - 展示与Airbnb集成的示例
  • mix mcpixir.blender - 控制Blender 3D软件的示例
  • mix mcpixir.browser - 使用Playwright进行网络浏览
  • mix mcpixir.filesystem - 操作文件系统
  • mix mcpixir.http - 到MCP服务器的HTTP连接
  • mix mcpixir.multi - 一起使用多个MCP服务器

获取特定示例的帮助:

mix help mcpixir.chat

运行示例

每个示例都可以按照以下模式运行:

# 基本用法
mix mcpixir.chat

# 带选项
mix mcpixir.browser --provider=anthropic --query="找到Hex.pm上排名前五的Elixir包"

常见选项

大多数示例都支持这些常见选项:

  • --provider=[openai|anthropic] - 要使用的LLM提供商
  • --model=MODEL - 要使用的特定LLM模型
  • --query=QUERY - 发送到LLM的查询

API密钥

这些示例需要OpenAI或Anthropic的API密钥。在环境中设置它们:

# 对于OpenAI
export OPENAI_API_KEY=your-openai-key

# 对于Anthropic
export ANTHROPIC_API_KEY=your-anthropic-key

调试

Mcpixir提供了内置的日志记录,有助于诊断代理实现中的问题。

配置日志记录

有几种方法可以配置日志记录:

1. 环境变量

使用MCP_USE_LOG_LEVEL环境变量设置日志级别:

export MCP_USE_LOG_LEVEL=debug  # 选项:debug, info, warn, error

2. 在代码中设置日志级别

你可以在代码中直接设置日志级别:

# 设置全局日志级别
Mcpixir.Logging.set_level(:debug)  # 选项::debug, :info, :warning, :error

3. 在mix.exsconfig.exs中配置

# 在config/config.exs中
config :mcpixir,
  log_level: :debug

发展路线图

  • 同时使用多个服务器
  • 测试远程连接器(http, ws)
  • ...

贡献

我们热爱贡献!欢迎打开问题报告错误或功能请求。

要求

  • Elixir 1.15+
  • Erlang/OTP 25+
  • MCP实现(如Playwright MCP)
  • LLM API访问(OpenAI, Anthropic等)

贡献

开发过程

我们欢迎贡献,让这个项目变得更好!以下是开始的一些步骤:

# 克隆仓库
git clone https://github.com/yourusername/mcp-use-elixir.git
cd mcp-use-elixir

# 安装依赖
mix deps.get

# 运行测试
mix test

# 运行代码格式化
mix format

# 运行代码检查
mix credo

发布过程

该项目遵循语义版本控制,并使用结构化的发布过程。你可以通过以下任一方法发布新版本:

使用Mix任务

mix mcp.release 0.2.0

使用shell脚本

./bin/release.sh 0.2.0

两种方法都会:

  1. 检查工作目录是否干净
  2. 更新mix.exs中的版本
  3. 更新CHANGELOG.md中的新版本
  4. 运行测试以确保一切正常
  5. 编译文档
  6. 创建git提交和标签
  7. 发布到Hex.pm

许可证

MIT