mcpField
如
如何创建和生成 MCP DLL 文件以供 CallFunc 调用

如何创建和生成 MCP DLL 文件以供 CallFunc 调用

本地服务
github.com/ZedMoster开发工具682 周前更新

关于 如何创建和生成 MCP DLL 文件以供 CallFunc 调用

这是面向 Revit MCP 服务的 C# DLL 实现说明,供开发者创建可由 CallFunc 动态调用的 MCP 方法。内容涵盖接口实现、JSON-RPC 2.0 交互和 DLL 编译放置。

主要功能

  1. 01实现 IMCPMethod 接口
  2. 02按 JSON-RPC 2.0 交互
  3. 03编译并部署 MCP DLL
  4. 04通过 CallFunc 调用方法

适用场景

  1. 01创建 Revit 标高等元素
  2. 02将自定义方法接入 Revit MCP 服务

MCP 相关

说明如何实现供 Revit MCP 服务动态调用的 DLL 方法,并通过 CallFunc 发起调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

来自项目 README

如何创建和生成 MCP DLL 文件以供 CallFunc 调用

本文档介绍如何创建一个 MCP DLL 文件,以供 CallFunc 方法调用。 MCP DLL 文件需要实现接口 xml.Revit.MCP.Public.IMCPMethod, 并按照 JSON-RPC 2.0 规范与 Revit 的 MCP 服务进行交互。

MCP DLL 的结构和实现

创建一个实现类

实现 IMCPMethod 接口

以下是一个实现类的示例,用于创建标高并返回新标高ElementModelRequest:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using xml.Revit.MCP.Models;
using xml.Revit.MCP.Public;
using xml.Revit.Toolkit.Attributes;
using xml.Revit.Toolkit.Extensions;
using xml.Revit.Toolkit.Utils;

namespace xml.Revit.MCPServer
{
    /// <summary>
    /// 实现新增标高功能的类,继承自 IMCPMethod 接口。
    /// </summary>
    public sealed class TopLevelAdd : IMCPMethod
    {
        /// <summary>
        /// 构造函数,初始化方法名称。
        /// </summary>
        public TopLevelAdd()
        {
            MethodName = "新增标高";
        }

        /// <summary>
        /// 方法名称,用于标识当前功能。
        /// </summary>
        public string MethodName { get; private set; }

        /// <summary>
        /// 执行新增标高的核心逻辑。
        /// </summary>
        /// <param name="request">包含请求参数的 JsonRPCRequest 对象。</param>
        /// <param name="uidoc">当前 Revit 的 UIDocument 对象。</param>
        /// <returns>返回一个 JsonRPCResponse 对象,包含执行结果。</returns>
        public JsonRPCResponse Execute(JsonRPCRequest request, UIDocument uidoc)
        {
            // 初始化响应对象
            var jsonResponse = new JsonRPCResponse();

            // 获取当前文档
            var doc = uidoc.Document;

            // 默认标高偏移量,单位为毫米
            double elevationOffset = 3000d;

            // 从请求参数中解析标高偏移量
            var obj = request.Params as JObject;
            if (obj != null)
            {
                elevationOffset = obj["offset"].Value<double>();
            }

            // 获取文档中的最高标高
            var highestLevel = doc.OfClass<Level>().OrderBy(l => l.Elevation).LastOrDefault();
            if (highestLevel == null)
            {
                throw new InvalidOperationException("未找到有效的标高。");
            }

            // 开启事务并创建新标高
            doc.Transaction(t =>
            {
                var newLevel = Level.Create(
                    doc,
                    highestLevel.Elevation + elevationOffset.MMToFeet() // 偏移量转换为英尺
                );

                // 将新标高信息封装到响应结果中
                jsonResponse.Result = new ElementModelRequest(newLevel);
            });

            return jsonResponse; // 返回响应对象
        }
    }
}

在 Visual Studio 中编译项目,生成 .dll 文件。 编译后,确保生成的 .dll 文件位于指定的 MCP 文件夹中。 mcp-dll.png

通过以上步骤,您可以轻松创建和生成 MCP DLL 文件,并将其集成到 Revit 的 MCP 服务中进行动态调用。

通过函数名称调用功能.png

mcp-tool

call_func 点击这里源码实现

在大模型中直接通过CallFunc 按一下提示词即可实现

response = call_func(ctx, params=[
    {"name": "新增标高", "params": {"offset": 3000}}
])

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。