Skip to main content
Glama

πŸ—οΈ Revit MCP Server

A Model Context Protocol server for Revit integration, enabling seamless communication between Claude AI and Autodesk Revit.

English | δΈ­ζ–‡

🎯 Overview

This TypeScript-based MCP server provides a bridge between Claude AI and Revit, allowing direct interaction with Revit models through a WebSocket connection. It implements the Model Context Protocol to enable:

  • ⚑ Real-time access to Revit model information

  • πŸ” Element querying and filtering

  • πŸ‘€ View and level management

  • πŸ›‘οΈ Robust error handling with fallback mock data

Related MCP server: QGISMCP

✨ Features

πŸ”Œ Revit Integration

  • πŸ“‘ WebSocket-based communication with Revit plugin

  • πŸ”„ Real-time model data access

  • πŸ” Graceful fallback to mock data when connection fails

  • βš™οΈ Configurable connection settings via environment variables

πŸš€ Core Functionalities

  • πŸ“Š Model Information

    • Access basic model metadata (name, path, version)

    • Get element counts and last modification date

    • Real-time model state synchronization

  • πŸ—οΈ Element Management

    • Query elements with flexible filtering

    • Access element properties and geometry

    • Batch element operations

  • πŸŽͺ View & Level Control

    • List all available views

    • Access level information

    • Navigate through model hierarchy

πŸ’» Development

πŸ“‹ Prerequisites

  • Node.js (v14 or higher)

  • npm

  • Autodesk Revit (2023 or later)

  • Revit WebSocket Plugin (companion plugin)

πŸ”§ Installation

Install dependencies:

npm install

Build the server:

npm run build

For development with auto-rebuild:

npm run watch

βš™οΈ Configuration

The server can be configured using environment variables:

REVIT_HOST=127.0.0.1    # Revit plugin WebSocket host
REVIT_PORT=8080         # Revit plugin WebSocket port

πŸ”— Integration with Claude Desktop

Add the server configuration to Claude Desktop:

Windows:

%APPDATA%/Claude/claude_desktop_config.json

Configuration format:

{
  "mcpServers": {
    "revit-mcp-server": {
      "command": "D:/path/to/revit-mcp-server/build/index.js"
    }
  }
}

πŸ› Debugging

For debugging the MCP communication:

  1. Use the built-in MCP Inspector:

npm run inspector
  1. Monitor WebSocket communication with Revit plugin

  2. Check server logs for connection and operation status

⚠️ Error Handling

The server implements robust error handling:

  • Automatic fallback to mock data when Revit connection fails

  • Detailed error logging

  • Graceful connection recovery

πŸ“„ License

MIT License

🀝 Contributing

Contributions are welcome! Please feel free to submit pull requests.

πŸ“¬ Contact

If you have any questions or suggestions, feel free to reach out:

Available Tools

6 tools
get_categoriesB

θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰η±»εˆ«

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action but does not reveal any behavioral traits, such as whether this is a read-only operation, if it requires specific permissions, or what the return format might be. This is a significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any waste. It is appropriately sized and front-loaded, making it easy to understand at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of interacting with a Revit model, the description is incomplete. It lacks details on behavioral traits, output format, and how the model context is provided, especially with no annotations and no output schema. This makes it inadequate for an agent to fully understand the tool's operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description does not add parameter details, which is appropriate, but it implies the tool operates on a Revit model context without specifying how that context is established. Baseline is 4 for zero parameters, as the schema fully covers the absence of inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'θŽ·ε–' (get) and resource 'Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰η±»εˆ«' (all categories in a Revit model), making the purpose specific and understandable. However, it does not explicitly distinguish this tool from sibling tools like 'get_families' or 'get_elements', which might also retrieve related model data, so it misses full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention context, prerequisites, or exclusions, such as whether it requires an open model or how it differs from sibling tools like 'get_families'. This leaves the agent with minimal usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_element_infoC

θŽ·ε– Revit ε…ƒη΄ ηš„θ―¦η»†δΏ‘ζ―

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdYesε…ƒη΄ ηš„ ID
getItemPropertyInfoNoζ˜―ε¦θŽ·ε–ε…ƒη΄ ε±žζ€§δΏ‘ζ―
getItemParameterInfoNoζ˜―ε¦θŽ·ε–ε…ƒη΄ ε‚ζ•°δΏ‘ζ―

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'gets' information, implying a read-only operation, but doesn't specify if it requires authentication, has rate limits, returns structured data, or handles errors. This leaves significant behavioral gaps for an agent to rely on.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence in Chinese that directly states the tool's purpose without any unnecessary words or fluff. It's appropriately sized and front-loaded, making it efficient and easy to understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what '详细俑息' (detailed information) entails, such as the format or content of the returned data, nor does it cover behavioral aspects like error handling. For a tool with parameters and no structured output, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with all parameters clearly documented in the input schema. The description doesn't add any additional meaning or context beyond what the schema provides, such as explaining the relationship between the boolean parameters. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('θŽ·ε–' meaning 'get') and resource ('Revit ε…ƒη΄ ηš„θ―¦η»†δΏ‘ζ―' meaning 'detailed information of Revit elements'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_elements' or 'get_families' which might also retrieve element-related information, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_elements' and 'get_families' available, there's no indication of what makes this tool distinct or when it should be preferred over others, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_elementsC

θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ε…ƒη΄ 

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryIdsNoιœ€θ¦θŽ·ε–ηš„ε…ƒη΄ ζ‰€ε±žη±»εˆ«ηš„Idι›†εˆ
viewIdsNoιœ€θ¦θŽ·ε–ηš„ε…ƒη΄ ζ‰€ε€„ηš„θ§†ε›Ύηš„Idι›†εˆ
levelIdsNoιœ€θ¦θŽ·ε–ηš„ε…ƒη΄ ζ‰€ε€„ηš„ζ ‡ι«˜ηš„Idι›†εˆ

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action ('θŽ·ε–' - get) without detailing permissions, rate limits, pagination, or what 'elements' entail (e.g., geometric data, properties). For a tool with 3 parameters and no output schema, this is a significant gap in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence: 'θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ε…ƒη΄ ' (Get elements from Revit model). It's front-loaded with the core action and resource, with zero wasted words. This is appropriately concise for a tool with good schema coverage, though it could benefit from more detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (3 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what 'elements' are, how results are returned, or the tool's behavior (e.g., filtering logic). With no output schema and minimal description, the agent lacks sufficient context to use the tool effectively beyond basic parameter input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for each parameter (categoryIds, viewIds, levelIds). The description adds no additional meaning beyond the schema, such as explaining how parameters interact or providing examples. Baseline 3 is appropriate since the schema does the heavy lifting, but the description doesn't compensate or enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the purpose as 'θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ε…ƒη΄ ' (Get elements from Revit model), which is clear but vague. It specifies the verb ('θŽ·ε–' - get) and resource ('ε…ƒη΄ ' - elements) but lacks specificity about scope or type of elements, and doesn't differentiate from sibling tools like 'get_element_info' or 'get_families'. The description is functional but minimal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention sibling tools like 'get_element_info' (which might provide detailed info) or 'get_families' (which might filter by family type), nor does it specify prerequisites or contexts for usage. This leaves the agent without direction on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_familiesC

θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰ζ—

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryIdNoζ—η±»εˆ« IDοΌˆε―ι€‰οΌ‰
nameNoζ—εη§°θΏ‡ζ»€οΌˆε―ι€‰οΌ‰

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves families but doesn't describe any behavioral traits like whether it's read-only, if it requires specific permissions, how it handles large datasets (e.g., pagination), or what the return format looks like. For a retrieval tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Chinese that directly states the tool's purpose without any unnecessary words. It's front-loaded and appropriately sized, making it easy for an agent to parse quickly. Every part of the sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (retrieving data with optional filters), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like safety, performance, or return values, which are crucial for an agent to use the tool effectively. The description should provide more context to compensate for these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with both parameters ('categoryId' and 'name') documented as optional filters. The description doesn't add any meaning beyond what the schema providesβ€”it doesn't explain how these filters work or their impact. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰ζ—' translates to 'Get all families in the Revit model.' It specifies the verb ('get') and resource ('families in Revit model'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_categories' or 'get_elements,' which is why it doesn't reach a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, exclusions, or comparisons to sibling tools such as 'get_categories' or 'get_elements,' leaving the agent without context for tool selection. This lack of usage instructions is a significant gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_levelsB

θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰ζ₯Όε±‚

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves data ('θŽ·ε–'), implying a read-only operation, but doesn't specify permissions, rate limits, output format, or potential side effects. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence: 'θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰ζ₯Όε±‚'. It's front-loaded with the core purpose, has zero waste, and is appropriately sized for a simple tool. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally complete. It states what the tool does but lacks behavioral details like output format or usage context. For a basic retrieval tool, this is adequate but leaves clear gaps, especially with no annotations to compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately doesn't mention any. Baseline for 0 parameters is 4, as the description doesn't mislead or omit necessary param info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰ζ₯Όε±‚' (Get all floors in the Revit model). It specifies the verb 'θŽ·ε–' (get) and resource 'ζ₯Όε±‚' (floors) with scope 'Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰' (all in the Revit model). However, it doesn't explicitly differentiate from sibling tools like 'get_elements' or 'get_categories', which might also retrieve model data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, and doesn't reference sibling tools like 'get_elements' or 'get_categories' that might overlap in functionality. This leaves the agent with minimal usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_viewsB

θŽ·ε– Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰θ§†ε›Ύ

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe behavioral traits such as whether it requires authentication, has rate limits, returns a list or structured data, or handles errors. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence in Chinese that directly states the tool's purpose with zero waste. It's appropriately sized and front-loaded, making it easy to understand at a glance without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no annotations, and no output schema, the description is minimally complete for a simple retrieval operation. However, it lacks details on output format (e.g., list of view names, structured data) and behavioral context, which could be important for an AI agent to use it correctly. It's adequate but has clear gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, but since there are no parameters, a baseline score of 4 is appropriate as it doesn't need to compensate for any gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'θŽ·ε–' (get/retrieve) and the resource 'Revit ζ¨‘εž‹δΈ­ηš„ζ‰€ζœ‰θ§†ε›Ύ' (all views in a Revit model), providing a specific purpose. However, it doesn't explicitly differentiate from sibling tools like 'get_elements' or 'get_levels', which might retrieve different types of Revit model components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an open Revit model), exclusions, or comparisons to sibling tools like 'get_elements' (which might include views as a subset). Usage is implied by the purpose but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updates
    • First observedget_categories
    • First observedget_element_info
    • First observedget_elements
    • First observedget_families
    • First observedget_levels
    • First observedget_views

TDQS

B3.2/5.0

Scored across 6 tools

Disambiguation5/5

Every tool has a clearly distinct purpose targeting different Revit model components: categories, element info, elements, families, levels, and views. There is no overlap in functionality, and an agent can easily distinguish between them based on the specific resource each retrieves.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with 'get_' as the prefix and a plural or singular noun describing the resource. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming style.

Tool Count4/5

With 6 tools, the count is reasonable for a Revit model server, covering key retrieval operations. However, it might be slightly under-scoped as it lacks tools for creating, updating, or deleting elements, which could be expected in a full Revit integration.

Completeness2/5

The tool set is severely incomplete for a Revit domain, as it only provides read-only retrieval operations. There are significant gaps in CRUD coverageβ€”no tools for creating, updating, or deleting elements, categories, families, etc., which will likely cause agent failures when trying to modify models.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects QGIS to Claude AI through the Model Context Protocol, enabling AI-assisted project creation, layer manipulation, processing algorithm execution, and Python code running within QGIS.
    7
    -
  • A
    license
    B
    quality
    D
    maintenance
    Connects Blender to Claude AI through the Model Context Protocol, enabling AI-assisted 3D modeling, scene creation, and manipulation through natural language commands.
    17
    2
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants like Claude to interact with Autodesk Construction Cloud Build platform for construction project management, including issues tracking, RFIs, submittals, and document management through natural language.
    -