如何创建和生成 MCP DLL 文件以供 CallFunc 调用 について
Revit MCP サービス向けの C# DLL 作成ガイドです。CallFunc からメソッドを動的に呼び出したい開発者を対象に、必要なインターフェースの実装、JSON-RPC 2.0 による連携、DLL のビルドと配置を説明します。
主な機能
- 01IMCPMethod インターフェースの実装
- 02JSON-RPC 2.0 による連携
- 03MCP DLL のビルドと配置
- 04CallFunc によるメソッド呼び出し
活用シーン
- 01レベルなどの Revit 要素の作成
- 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 文件,并将其集成到 Revit 的 MCP 服务中进行动态调用。

mcp-tool
在大模型中直接通过CallFunc 按一下提示词即可实现
response = call_func(ctx, params=[
{"name": "新增标高", "params": {"offset": 3000}}
])
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。