quickstart_zh - lizqwerscott/mcp.el GitHub Wiki
首先需要配置好 gptel 有可以使用工具调用的 ai 模型, 比如 claude 之类的。 然后配置想要使用的 mcp server, 我拿 fetch 3 这个 mcp server 来举例,这个 mcp server 可以获取网页内容,并且转化为 markdown。
根据 官方文档 配置想要启动的服务器。
这个配置和官方的一样,第一个参数是 mcp server 的名字,第二个参数是 command, 最后一个参数是 args
(require 'mcp-hub)
(setq mcp-hub-servers
'(("fetch" . (:command "uvx" :args ("mcp-server-fetch")))))
然后使用命令 mcp-hub
启动服务器管理界面,或者也可以用 mcp-hub-start-all-server
来启动所有的配置好的 mcp 服务器。
目前想要与 gptel 结合,可以用以下几个函数。 这个函数是让 mcp 生成符合 gptel 工具格式的列表,并且注册到 gptel 里面,这样 gptel 就知道可以调用那些 工具。
(defun gptel-mcp-register-tool ()
(interactive)
(let ((tools (mcp-hub-get-all-tool :asyncp t :categoryp t)))
(mapcar #'(lambda (tool)
(apply #'gptel-make-tool
tool))
tools)))
运行完这个函数,就可以在 gptel 的工具使用菜单中看到注册好的 mcp 工具。
目前有两种方式。 第一种:使用 gptel 自带的 gptel-menu 里面的菜单激活工具。 第二种:使用以下函数激活所有所有 mcp 工具和 关闭所有 mcp 工具。
;; 激活所有 mcp 工具
(defun gptel-mcp-use-tool ()
(interactive)
(let ((tools (mcp-hub-get-all-tool :asyncp t :categoryp t)))
(mapcar #'(lambda (tool)
(let ((path (list (plist-get tool :category)
(plist-get tool :name))))
(push (gptel-get-tool path)
gptel-tools)))
tools)))
;; 关闭所有 mcp 工具
(defun gptel-mcp-close-use-tool ()
(interactive)
(let ((tools (mcp-hub-get-all-tool :asyncp t :categoryp t)))
(mapcar #'(lambda (tool)
(let ((path (list (plist-get tool :category)
(plist-get tool :name))))
(setq gptel-tools
(cl-remove-if #'(lambda (tool)
(equal path
(list (gptel-tool-category tool)
(gptel-tool-name tool))))
gptel-tools))))
tools)))
激活之后就正常和 ai 对话就好了,在这个过程中 ai 自己决定是否要使用工具来获取信息。