OmniMCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OmniMCPlist available devices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OmniMCP — The Universal Interface Between AI and Industrial Hardware
A universal hardware capability layer that enables AI agents to discover, monitor, and control industrial devices through the Model Context Protocol (MCP).
OmniMCP is an MCP server built using NitroStack that provides a unified interface between AI applications and industrial hardware. Instead of building custom integrations for every device, OmniMCP allows hardware to be connected through lightweight adapters that expose standardized capabilities via the Model Context Protocol (MCP).
Our prototype currently includes an ESP32 Machine Controller and an Inspection Camera Adapter, with an architecture designed to support PLCs, CNC machines, robots, sensors, and other Industry 4.0 devices.
Table of Contents
Overview
Industrial hardware typically exposes different APIs, SDKs, and communication protocols, making AI integration complex and difficult to scale.
OmniMCP solves this by introducing a universal hardware capability layer built on the Model Context Protocol (MCP).
Each supported device is wrapped in a lightweight adapter that exposes common capabilities such as:
Machine control
Device monitoring
Image capture
Sensor access
This allows AI assistants to interact with different hardware through a single, standardized interface without worrying about vendor-specific implementations.
What is MCP?
The Model Context Protocol (MCP) is an open standard that enables AI assistants to securely interact with external tools, services, and hardware.
OmniMCP exposes industrial devices as MCP Tools, Resources, and Prompts, making them compatible with clients such as:
Claude Desktop
Cursor
NitroStudio
MCP Inspector
Any MCP-compatible client
Features
Universal hardware abstraction layer
Modular adapter-based architecture
ESP32 Machine Controller
Inspection Camera Adapter
Automatic hardware discovery
Device connection management
MCP Tools
MCP Resources
MCP Prompts
Built and deployed using NitroStack
Easily extendable for future industrial hardware
Live Demo
🚀 Live MCP Endpoint
https://omnimcp-6a5b3a86-d4rk-null-amrita-university-amritapuri-campus.app.nitrocloud.ai💻 GitHub Repository
https://github.com/gautham-sai05/omni-mcpAvailable Hardware
ESP32 Machine Controller
Capabilities:
Connect to hardware
Execute commands
Read device status
Simulate industrial machine control
Related MCP server: MQTT MCP Server
Inspection Camera Adapter
Capabilities:
Capture inspection images
Standardized image responses
Laptop webcam support
Ready for ESP32-CAM integration
Available MCP Tools
Tool | Description |
| Discover registered hardware |
| Connect to a hardware adapter |
| Disconnect hardware |
| Retrieve current device status |
| Execute adapter-specific commands |
Available MCP Resources
hardware://devices/available
hardware://devices/connected
hardware://system/healthGetting Started
Install
git clone https://github.com/gautham-sai05/omni-mcp.git
cd omni-mcp
npm installConfigure
Copy the environment file.
cp .env.example .envExample:
PORT=3000
CAMERA_SOURCE=laptop
ESP32_CAM_URL=http://192.168.1.xxxRun
npm run build
npm run startThe MCP endpoint will be available at
http://localhost:3000/mcpConnect to an MCP Client
Example MCP configuration:
{
"mcpServers": {
"omnimcp": {
"url": "https://omnimcp-6a5b3a86-d4rk-null-amrita-university-amritapuri-campus.app.nitrocloud.ai"
}
}
}Compatible with:
Claude Desktop
Cursor
NitroStudio
MCP Inspector
Architecture
AI Client
(Claude / Cursor / NitroStudio)
│
▼
OmniMCP Server
│
Adapter Manager
┌─────────┴─────────┐
▼ ▼
ESP32 Adapter Camera Adapter
│ │
▼ ▼
Machine Controller Inspection CameraFuture Roadmap
Planned hardware adapters include:
PLCs
Robot Arms
CNC Machines
Modbus Devices
MQTT Devices
OPC-UA
Industrial Sensors
AI-powered Vision Systems
Digital Twin Integration
Built with NitroStack
OmniMCP was developed and deployed using NitroStack, which simplified building an MCP server by providing the infrastructure for Tools, Resources, dependency injection, and deployment.
This allowed us to focus on solving the hardware integration problem while NitroStack handled the MCP server framework.
Learn more about NitroStack:
Team
Team D4RK NULL
Abisher R Nair
Alwin Varghese
Gautham Sai
Gunisha Kaur
License
MIT License
⭐ If you found this project interesting, consider giving it a star!
Built with ❤️ for the NitroStack × Amrita University MCP Hackathon
OmniMCP — One Interface. Every Machine. Any AI.
Available Tools
5 toolsconnect_deviceA
Connect to a specific hardware device by ID
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The unique identifier of the device to connect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'connect' without explaining potential side effects (e.g., whether it establishes a persistent connection, what happens if already connected, or if any device state changes). This is a significant gap for a mutating action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the essential purpose. It contains no filler or redundant information, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter, but there is no output schema and the description does not explain the return value or behavioral outcomes. It also lacks information about prerequisites or side effects. Given the context of sibling tools, the description gives the gist but is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter deviceId, which already explains it as 'The unique identifier of the device to connect'. The tool description adds 'by ID' but no additional semantic detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Connect'), the resource ('a specific hardware device'), and the scope ('by ID'). It is easily distinguished from siblings like list_devices, disconnect_device, and device_status, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'connect' implies the intended use, but the description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., device must be listed), nor does it suggest using list_devices first or using execute_command after connecting. Usage is implied rather than clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_statusA
Get connection and health status of a specific hardware device
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The unique identifier of the device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. The verb 'Get' suggests a read-only operation, but it does not explicitly state safety, required permissions, or potential side effects. For a simple status-check tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise, front-loaded sentence that immediately states the action and target. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter status retrieval with no output schema, the description is mostly complete. It lacks detail on what 'health status' contains or the shape of the return value, but the core action and target are clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter deviceId already has a clear description in the schema. The tool description adds no extra meaning beyond 'specific hardware device', so it meets the baseline without adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and clearly identifies the resource as 'connection and health status of a specific hardware device'. This distinguishes it from siblings like list_devices (lists all) and connect/disconnect_device (changes state).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool targets a specific device, implying you need a deviceId (obtained from list_devices). However, it does not explicitly state when not to use it or mention alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_deviceA
Disconnect from a specific hardware device by ID
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The unique identifier of the device to disconnect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only restates the action without disclosing side effects, reversibility, authentication requirements, or what happens after disconnection. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It clearly states the action and target.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema, but it is a mutation action with no annotations. The description does not explain side effects, error conditions, or how disconnection affects device state, leaving room for ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (deviceId is well-described). The description adds no extra parameter semantics beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Disconnect') and resource ('hardware device') with a clear scope ('by ID'), distinctly differentiating it from siblings like connect_device and list_devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool when you want to disconnect a specific hardware device. It doesn't explicitly mention alternatives or exclusions, but the sibling tools provide implicit context for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandB
Execute an action or command on a specific hardware device
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Optional parameter payload key-value pairs | |
| command | Yes | The command/action name to execute (e.g., "read_temp", "set_gpio", "capture_image") | |
| deviceId | Yes | The unique identifier of the device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only states 'execute an action or command' without revealing potential side effects, permission requirements, reversibility, or other critical behavioral traits. For a command execution tool, this is a substantial omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero redundancy. It communicates the core purpose immediately without wasted words, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (arbitrary command execution with optional params), the lack of an output schema, and no annotations, the description is insufficient. It does not mention return values, error handling, safety considerations, or how the parameter payload should be used, leaving the agent without critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all three parameters (deviceId, command, params) with descriptions, so the standalone description adds no extra semantic value. The baseline for full schema coverage is 3, and the description neither enhances nor contradicts parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('execute') and clearly states the resource ('an action or command on a specific hardware device'). This distinctly separates it from sibling tools that list, connect, disconnect, or check device status, making the tool's primary function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives like connect_device or device_status. It lacks context about scenarios where command execution is appropriate, any prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
List all registered hardware devices and their metadata
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states 'List all registered hardware devices and their metadata,' which adds only minimal context beyond the tool name. It does not explicitly mention that this is a safe, read-only operation, whether any permissions are required, or what 'metadata' includes. For a list tool, some disclosure of non-destructive behavior or scope would be expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb 'List' and directly states the resource. Every word is necessary; there is no fluff or repetition. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is trivial (0 params, no output schema), the description suffices to convey the basic capability. However, it does not specify the return format or the exact metadata fields, which would be helpful since no output schema exists. It is minimal but not fully complete for a list tool, as it leaves 'metadata' undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties (100% schema description coverage with no parameters). The description needs to add no parameter information, and the baseline for 0 params is 4. The description does not introduce any unnecessary parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with a clear resource ('all registered hardware devices') and mentions metadata, making the purpose unambiguous. It is clearly distinct from sibling tools like connect_device or device_status, which handle individual device actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the word 'List' — an agent can infer it is the tool to enumerate devices. However, the description does not explicitly state when to choose this over sibling tools like device_status, nor does it mention any exclusions or prerequisites. The guidance is thus implicit rather than explicit.
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.
5 tool updates
v1.0.0- First observed
connect_device - First observed
device_status - First observed
disconnect_device - First observed
execute_command - First observed
list_devices
TDQS
Scored across 5 tools
Each tool has a clear, unique purpose: listing, connecting, disconnecting, checking status, and executing commands. No two tools could be confused for one another.
Most tools follow a verb_noun pattern (list_devices, connect_device, disconnect_device, execute_command), but device_status breaks the pattern by being noun_noun rather than get_status or similar. The inconsistency is minor and does not hinder readability.
With five tools, the server is concise and well-scoped for hardware device management. Each tool earns its place, covering the essential operations without unnecessary bloat.
The surface covers listing, connecting, disconnecting, health status, and command execution, which are core for device management. Missing operations like updating device metadata or removing a device are not clearly required by the stated purpose, so the gap is minor.
Maintenance
Related MCP Connectors
AI agent registry — search, discover, register, and connect agents via MCP.
AgencyAI's public MCP for service discovery and AI-readiness assessment.
Let AI agents query data and act across all your business apps via MCP.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Related MCP Servers
- AlicenseBqualityNot gradedmaintenanceAn MCP server that bridges the physical world and AI models by enabling natural language control of IoT hardware via the MQTT protocol. It supports real-time device monitoring, command publishing, and response handling for seamless integration between AI clients and physical devices.3MIT
- AlicenseNot gradedqualityAmaintenanceEnables LLM agents to securely monitor and control MQTT devices for building automation, industrial control, and smart home systems through a standardized MCP interface.21MIT
- AlicenseNot gradedqualityAmaintenanceEnables cloud LLM agents to discover and invoke physical hardware on edge and IoT devices through standard MCP tools, bridging constrained device channels like UART, BLE, and Wi-Fi.3MIT
- FlicenseBqualityBmaintenanceUniversal MCP server for industrial PLC communication, enabling AI agents to read sensors, alarms, status, setpoints, and write setpoints via adapters for Modbus, S7, or custom PLCs.6-