Token导航 LogoToken导航TokenDH.com
Modex MCP logo
AI代理SSE官方级别未说明来源级核验

Modex MCP

MCP Server

Modex是一个Clojure库,用于通过实现模型上下文协议(MCP)来扩展AI模型的功能,包括工具、资源和提示的集成。

工具数

0

提示词数

0

GitHub Stars

114

资源数

0
AI扩展Claude工具集成Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

theronic

提供方

theronic

最后核验

2026/5/17 21:07

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

Modex:Clojure中的模型上下文协议服务器和客户端库

Modex(MOdel+ContEXt)是一个Clojure库,可以让你用新的工具、资源和提示来增强你的人工智能。

Modex实现了(大部分) 模型上下文协议 在“原生”Clojure中构建MCP服务器和客户端。

因为它是原生的Clojure,你不需要处理Anthropic的 MCP Java SDK.

Modex实现了 stdio 2024-11-05 MCP规范中的传输,因此不需要像这样的代理 mcp代理 在SSE\stdio之间进行转换,反之亦然。

Modex在行动中的截图

Claude Desktop可以通过其MCP客户端与Modex MCP服务器通信:

目录

  1. 快速启动
  2. 什么是MCP?
  3. Modex能做什么?
  4. 详细的分步说明
  5. 实施
  6. 项目状态
  7. 依据
  8. 常见问题解答
  9. 许可证

示例工具

  • Datomic MCP 使用Modex公开Datomic工具,以便您的模型可以在开发或产品中查询数据库模式和数据。

快速启动

  1. git clone git@github.com:theronic/modex.git
  2. cd modex
  3. ./build.shtarget/modex-mcp-0.2.2.jar.
  4. 在以下位置打开您的Claude桌面配置 ~/Library/Application\ Support/Claude/claude_desktop_config.json
  5. 配置一个新的MCP服务器,该服务器将在其 _完整路径_:
{
  "mcpServers": {
    "modex-mcp-hello-world": {
      "command": "java",
      "args": ["-jar", "/Users/your-username/code/modex/target/modex-mcp-0.2.2.jar"]
    }
  },
  "globalShortcut": ""
}
  1. 重新启动Claude Desktop以激活新的MCP服务器+工具:)(Cmd+R刷新不会重新加载配置,只会重新启动工具)
  2. 告诉Claude“用123运行inc工具”,授权该工具,你应该看到124的输出。

什么是MCP?

MCP允许您使用工具、资源和提示来增强您的AI模型:

  • 工具 它可以做的事情,比如查询数据库(例如Datomic)。
  • 资源 是它可以读取的文件和数据,如PDF银行对账单。
  • 提示 是模板化的消息和工作流。

用例

调制解调器由以下人员使用 数据经济学mcp,它将我们的生产Datomic数据库暴露给像Claude Desktop这样的MCP客户端。AI模型通过读取我们的数据库模式并运行检查服务器状态和IP的查询来智能诊断生产中的支持查询,因此它可以尝试访问它并将VM的期望状态与集群中的实际状态进行比较。

随着时间的推移,我希望使用Modex+其他MCP工具自动化我们的大部分定期支持查询。

Modex能做什么?

完整示例

中有一个MCP服务器示例 src/modex/mcp/core.clj 它使用一些基本工具定义了MCP服务器。

您的MCP客户端(例如Claude Desktop)可以连接到此服务器,并使用公开的工具为您的AI模型提供额外的上下文。

数据结构

工具

在内部,工具只是 Tool 记录几个 Parameter 论据:

  • (defrecord Tool [name doc args handler])
  • (defrecord Parameter [name doc type required default])

然而,使用以下方式定义工具更方便 tool & tools 下面的宏。

描述一个单独的工具 tool 宏:

tool 宏观行为如下 defrecord,其中处理程序定义采用参数映射ala {:keys [arg1 arg2 ...]} 但有额外的(可选)地图 :type, :or & :doc此元数据用于向MCP客户端描述该工具。

  • MCP规范目前仅支持 :string & :number 刀具参数类型。
  • 存在于 :or 地图意味着可选性。
  • 缺少参数docstring默认为参数名称字符串。
(require '[modex.mcp.tools :as tools])

(def add-tool
  (tools/tool
    ; feels like defrecord.
    (add [{:keys [x y]
           :type {x :number
                  y :number}
           :or   {y 0} ; y is optional due to its presence in the :or map.
           :doc  {x "First number"
                  y "Second number"}}]
         [(+ x y)]))) ; tools should return a vector (to support multiple values).

使用以下命令调用工具 invoke-tool 包括验证:

调用使用参数映射,就像MCP客户端对 tools/call 请求:

(tools/invoke-tool add-tool {:x 5 :y 6}) ; Modex will map these arguments and call the handler.
=> {:success true, :results [11]} ; note :results is vector to support multiple values.

直接调用工具处理程序以跳过验证和错误处理:

(tools/invoke-handler (:handler add-tool) {:x 5 :y 6})
=> [11] ; note vector result to support multiple values.

使用定义工具集 tools

tools 宏只是调用 tool 宏用于每个工具定义,并返回一个基于工具名称(关键字)的工具映射:

(def my-tools
  "Define your tools here."
  (tools/tools
    (greet
      "Greets a person by name." ; tools can have a docstring
      [{:keys [first-name last-name]
        :doc {first-name "A person's first name."
              last-name  "A person's last name (optional)."}
        :type {first-name :string
               last-name  :string}
        :or {last-name nil}}] ; last-name is optional, implied by presence in `:or` map.
      ; tools should return collection.
      [(str "Hello from Modex, "
            (if last-name ; args can be optional
              (str first-name " " last-name)
              first-name) "!")])
    
    (add
      "Adds two numbers."
      ; Tool handler args also support deprecated vector arg-style,
      ; but this is superseded by the newer map-destructuring style:
      [^{:type :number :doc "First number to add."} a
       ^{:type :number :doc "Second number to add."} b]
      [(+ a b)])

    (subtract
      "Subtracts two numbers (- a b)"
      [^{:type :number :doc "First number."} a
       ^{:type :number :doc "Second number."} b]
      [(- a b)])

    (error-handling
      "This tool throws intentionally. Modex will handle errors for you."
      []
      (throw (ex-info "Modex will handle exceptions." {})))))

创建Modex MCP服务器+工具:

(require '[modex.mcp.server :as server])
(def my-mcp-server
  "Here we create a reified instance of AServer. Only tools are presently supported."
  (server/->server
    {:name       "Modex MCP Server"
     :version    "0.0.2"
     :initialize (fn [_init-params] ; init-params, but may contain client capabilities in future.
                   "Do long-running setup & blocking I/O here, like connecting to prod database.")
     :tools      my-tools
     :prompts    nil    ; Prompts are WIP.
     :resources  nil})) ; Resources are WIP.

启动MCP服务器

(server/start-server! my-mcp-server)

或者把它放在你的 -main 功能。

协议

Modex暴露了一个 AServer 协议和DSL,用于定义描述MCP服务器的工具协议,这些协议公开了工具、资源和提示。

A服务器协议:

(defprotocol AServer
  (protocol-version [this])
  
  (server-name [this])
  (version [this])

  (capabilities [this])
  
  (initialize [this _init-params]) ; init-params is empty for now, but may contain client capabilities in future.

  (list-tools [this])
  (call-tool [this tool-name arg-map])

  (list-resources [this])
  (list-prompts [this]))

详细的分步说明

第一步:构建Uberjar

在运行它之前,你必须先构建它。构建输出一个uberjar,它类似于Java可执行文件。

clojure -T:build uber

或者运行执行该操作的助手:

./build.sh

(你可能需要跑步 chmod +x build.sh)

步骤2:打开Claude桌面配置

打开您的Claude桌面配置文件, claude_desktop_config.json,在MacOS上应位于:

~/Library/Application\ Support/Claude/claude_desktop_config.json

步骤3:配置MCP服务器

在下面添加一个元素 mcpServers 所以看起来像这样:

{
  "mcpServers": {
    "modex": {
      "command": "java",
      "args": ["-jar", "/Users/your-username/code/modex/target/modex-mcp-0.2.2.jar"]
    }
  },
  "globalShortcut": ""
}

这个消息告诉克劳德桌面有一个名为 modex 它可以通过运行连接到 java -jar /path/to/your/uber.jar.

其工作方式是,您的本地MCP客户端(即Claude Desktop)启动您的MCP服务器进程,并通过stdin/stdout管道与其通信。

步骤4:重新启动克劳德桌面

现在,你应该可以问Claude“run foo”或“foo说什么?”,它就会运行 这 foo 工具,并回复“你好,AI!”。

实施

Modex在Clojure中实现了MCP客户端和服务器 _大多_ 符合 2024-11-05 MCP规范.

消息使用JSON-RPC 2.0有线格式进行编码。

有三种消息类型:

  • 请求有 {:keys [id method ?params]}
  • 回应有 {:keys [id result ?error]}
  • 通知已 {:keys [method ?params}

MCP支持两种传输类型:

  • \[x\] stdio/ststdout——在Modex中实现。
  • \[\]服务器发送事件(SSE)-尚未实现。适用于受限网络

项目状态

  • \[x\] 通过测试
  • \[x\] 人机工程学(服务器/客户端协议?)
  • \[x\] 工具
  • \[x\] nREPL用于实时更改正在运行的进程
  • \[\]资源
  • \[\]提示
  • \[进行中\]SSE支持
  • \[进行中\]流式HTTP支持(2025-03-26 MCP规范)

依据

有一个现有的图书馆 mcp clj 它使用SSE,因此需要mcp代理从SSE\stdio进行代理。我对此很恼火,所以我做了Modex。

常见问题解答

当MCP客户端(如Claude Desktop)连接时,我可以修改服务器吗?

还没有,但我很快就会添加一个nREPL,这样你就可以在Claude Desktop连接到进程时评估更改,而无需重建uberjar。

顺便说一句,我试着让它跑起来 clojure -M -m modex.mcp.server,但您无法设置Claude Desktop的工作目录。

所以目前,我重建了uberjar并重新启动了Claude Desktop。会修好的。

感谢付费Modex客户:

许可证

总之:

  • 非商业用途免费:使用它、修改它、在下共享它 GPLv3 免费,只要保持开源。
  • 商业用途:想将更改保密吗?一次性支付20美元获得永久商业许可证。这涵盖了我在公共场合继续构建AI代币的成本。

此工具根据 GNU通用公共许可证v3.0(GPLv3)。您可以自由使用、修改和分发它,前提是任何衍生作品也根据GPLv3获得许可并开源。这确保了该工具可供社区免费使用,同时要求任何更改都具有透明度。

如果你想在专有项目中使用或修改这个工具,而不在GPLv3下发布你的更改,你 可以购买商业许可证。这允许您将您的修改保密,以供个人或商业使用。 要获得商业许可证,请通过以下方式联系我 modex@petrus.co.za.

作者

目录标签

目录标签

AI扩展Claude工具集成Clojure本地部署Clojure库模型上下文协议

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

SSE

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

SSEnone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

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

仍需确认:installCommand

来源信息

继续浏览同类 MCP