Skip to main content
Glama
Evin009

io.github.Evin009/smartrent-mcp

by Evin009

SmartRent MCP

PyPI version Python versions License: MIT

An MCP (Model Context Protocol) server that lets Claude control your SmartRent smart home devices — locks, thermostat, light switches, and sensors — through natural conversation.

You: "Turn off the kitchen lights and lock the front door"
Claude: "Kitchen turned off. Front Door - Lock is now locked."

Table of Contents


Related MCP server: LMStudio-MCP

Requirements

  • A SmartRent account with devices already set up in the SmartRent app (this only works if your building/home uses SmartRent hardware — front door locks, thermostats, switches, or sensors)

  • Python 3.10+

  • Either uv or pip — you likely already have one of these


Installation

Option A — using uv (recommended, no separate install step)

If you don't have uv yet, install it once:

# Mac/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

That's it — uvx will download and run the package automatically the first time Claude needs it. No manual install command required.

Option B — using plain pip

pip install smartrent-mcp

Setup — Claude Desktop

1. Open your Claude Desktop config file

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

2. Add the server entry

If you installed via uv (Option A):

{
  "mcpServers": {
    "smartrent-mcp": {
      "command": "uvx",
      "args": ["smartrent-mcp"],
      "env": {
        "SMARTRENT_EMAIL": "your_smartrent_email",
        "SMARTRENT_PASSWORD": "your_smartrent_password"
      }
    }
  }
}

If you installed via pip (Option B):

{
  "mcpServers": {
    "smartrent-mcp": {
      "command": "smartrent-mcp",
      "env": {
        "SMARTRENT_EMAIL": "your_smartrent_email",
        "SMARTRENT_PASSWORD": "your_smartrent_password"
      }
    }
  }
}

If you already have other servers under "mcpServers", just add "smartrent-mcp" as another entry — don't replace the existing ones.

3. Restart Claude Desktop

Fully quit the app (Cmd+Q on Mac, or right-click the tray icon and Quit on Windows) and reopen it. Closing the window alone is not enough.

4. Try it

Ask Claude:

  • "What's the status of my home?"

  • "Turn on the kitchen lights"

  • "Lock the front door"

  • "Set temperature to 72 cool mode"


Setup — Claude Web

Claude Web only connects to remote MCP servers over a URL — it cannot run local commands like uvx. To use this server with Claude Web, you need to self-host a remote instance. See Self-Hosting below, then add your deployed URL in Claude Web → Settings → MCP Servers.


Available Tools

Tool

Description

Parameters

ping

Test that the server is alive

none

get_device_status

Read the status of all devices — locks, thermostat, switches, sensors

none

switch_control

Turn a light switch on or off

name (e.g. "kitchen"), action ("on" / "off")

lock_door

Lock or unlock the front door

action ("lock" / "unlock")

set_temperature

Set thermostat temperature, mode, and unit

temperature (int), mode ("cool" / "heat" / "auto" / "off", default "cool"), unit ("F" / "C", default "F")

Device matching is partial and case-insensitive — "dining" will match a switch named "Dining Room".


Self-Hosting (Remote / SSE mode)

By default this package runs in stdio mode for local use with Claude Desktop. To run it as a remote, always-on server (for Claude Web or shared use), set the TRANSPORT environment variable:

TRANSPORT=sse SMARTRENT_EMAIL=you@example.com SMARTRENT_PASSWORD=yourpassword smartrent-mcp

This starts an HTTP/SSE server (default port 8000, override with PORT). Deploy it anywhere that runs Python — Railway, Render, Fly.io, etc. — with these environment variables set:

Variable

Required

Description

SMARTRENT_EMAIL

Yes

Your SmartRent account email

SMARTRENT_PASSWORD

Yes

Your SmartRent account password

TRANSPORT

No

stdio (default) or sse

PORT

No

Port to listen on in sse mode (default 8000)

Once deployed, connect to it at https://your-deployment-url/sse.


Troubleshooting

"Invalid Host header" or connection refused on a remote deployment The server disables DNS rebinding protection by default to support remote access. If you've changed this, make sure TransportSecuritySettings(enable_dns_rebinding_protection=False) is set in server.py.

Claude Desktop doesn't show any tools Make sure you fully quit and restarted the app (not just closed the window). Check the MCP logs:

  • Mac: ~/Library/Logs/Claude/mcp-server-smartrent-mcp.log

  • Windows: %APPDATA%\Claude\logs\mcp-server-smartrent-mcp.log

"Username or password was wrong" Verify your SmartRent credentials work by logging into the SmartRent mobile app with the same email/password.

"No switch/lock/thermostat found on this account" Your SmartRent account needs the corresponding device type already set up in the SmartRent app.


Security

Your SmartRent credentials are passed as environment variables directly to the server process and are never sent anywhere except SmartRent's own login API. They are not logged or stored by this package.

If you're self-hosting in sse mode, anyone with your server's URL can control your home — there is currently no authentication layer on remote mode. Keep your deployment URL private, or restrict network access to it.


Built With

License

MIT

Available Tools

5 tools
get_device_statusA

Get the current status of all SmartRent devices (locks, thermostat, switches, sensors)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

The description discloses this is a read operation ('get current status') and lists device types. However, no annotations exist, and the description does not mention potential side effects, authentication needs, rate limits, or behavior when no devices are present. It is minimally adequate.

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 with no extraneous information. It is perfectly concise for the tool's simplicity.

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

Completeness5/5

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

Given no parameters and the existence of an output schema (per context signals), the description sufficiently conveys the tool's purpose and scope. It is complete for a read-only status retrieval tool.

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 zero parameters. The description adds meaning beyond the empty schema by specifying what is retrieved (status of all listed device types), achieving baseline 4 for parameterless tools.

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

Purpose5/5

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

The description clearly states the action (Get) and the resource (current status of all SmartRent devices), listing specific device types (locks, thermostat, switches, sensors). It distinguishes itself from siblings like lock_door (specific device) or set_temperature (specific action).

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

Usage Guidelines3/5

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

The description implies usage for checking overall device status but does not explicitly state when to use this tool versus alternatives (e.g., for a general overview vs. controlling a specific device). No when-not or alternative guidance is provided.

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

lock_doorA

Lock or unlock the front door. action: 'lock' or 'unlock'

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, so the description must carry the full burden. It only states the action parameter values but does not disclose side effects, failure modes, or state behavior (e.g., what happens if already locked). Minimal behavioral info.

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?

Two sentences with no redundant info. The main purpose is front-loaded, and the action values are clearly specified. Every word earns its place.

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?

The tool is simple with one parameter, and the description covers its core purpose and allowed values. However, it omits return value behavior (though an output schema exists), error conditions, and any prerequisites. Adequate but not thorough.

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?

Schema coverage is 0% with a simple string parameter. Description explicitly lists allowed values 'lock' and 'unlock', adding clarity beyond the raw schema. This compensates for the lack of enum constraints.

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

Purpose5/5

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

Description clearly states 'Lock or unlock the front door', which is a specific verb+resource pair. It distinguishes from siblings like ping, get_device_status, switch_control, and set_temperature, which are for different devices.

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 on when to use lock vs unlock, or when to prefer this tool over alternatives. No prerequisites or context provided.

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

pingA

Test that the server is alive

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It states the tool tests server aliveness but does not disclose behavior beyond that, such as side effects, latency, or how results are returned. For a simple ping, this may be adequate but lacks explicit 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, short sentence with no unnecessary words. It is appropriately sized and front-loaded.

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

Completeness5/5

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

Given the tool's simplicity (zero parameters, no nested objects, output schema present), the description is complete enough. The output schema covers return values, so the description does not need to elaborate.

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?

There are zero parameters, so schema coverage is 100% by default. The description does not need to add parameter info, meeting the baseline of 4.

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

Purpose5/5

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

The description 'Test that the server is alive' clearly states the tool's verb (test) and resource (server aliveness). It distinguishes from siblings like get_device_status, switch_control, lock_door, set_temperature which are device-specific actions.

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, such as checking device status. The description implies basic connectivity testing but offers no explicit when/when-not or alternatives.

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

set_temperatureB

Set thermostat temperature and mode. temperature: the temperature value mode: 'cool', 'heat', 'auto', or 'off' unit: 'F' for farenheit (default) or 'C' for celcius

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNocool
unitNoF
temperatureYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 must disclose behavioral traits. It mentions 'set' implying state change but fails to describe side effects, authorization needs, failure modes, or reversibility.

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 concise, with a clear one-line purpose followed by parameter explanations. No extraneous information, front-loaded with the action.

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?

The tool is simple with three parameters and an output schema exists, so the description need not detail return values. However, it lacks context about device prerequisites, success/failure behavior, and real-world effects.

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?

Schema description coverage is 0%, so the description adds value by enumerating valid values for mode ('cool', 'heat', 'auto', 'off') and unit ('F', 'C'), and explaining temperature as 'the temperature value'. This compensates for the lack of schema descriptions, though it could specify temperature range or precision.

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 states 'Set thermostat temperature and mode', which clearly identifies the action and resource. It distinguishes from sibling tools like ping, get_device_status, switch_control, and lock_door, but does not explicitly differentiate usage scenarios.

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 does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites, conditions, or exclusions.

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

switch_controlA

Turn a light switch on or off. name: partial or full name of the switch (e.g. 'bedroom', 'living room') action: 'on' or 'off'

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
actionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions 'turn on or off' and parameter hints, but omits details like side effects, error behavior (e.g., switch not found), return format, or safety considerations. This is insufficient for a tool with no annotations.

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 extremely concise, using two short sentences that front-load the purpose and then define parameters. Every word earns its place with no redundancy.

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

Completeness4/5

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

Given the tool is simple (two parameters, no nested objects) and an output schema exists (so return info is covered), the description provides sufficient context for typical use. A minor gap is not specifying behavior for invalid inputs, but this is partially addressed by the parameter examples.

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 schema has 0% description coverage (no property descriptions), so the description adds essential meaning: the 'name' parameter is a partial or full name with examples, and 'action' is 'on' or 'off'. This compensates well, though it could include more details like case sensitivity or valid characters.

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

Purpose5/5

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

The description clearly states the tool turns a light switch on or off, with a direct verb and resource. It distinguishes itself from sibling tools like ping (network), get_device_status (status), lock_door, and set_temperature by specifying light switches.

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

Usage Guidelines3/5

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

The description implies usage for light switch control but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions or exclusions (e.g., prerequisites, when not to use it). The context of sibling tools helps, but the description itself lacks such guidance.

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. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.2
    • First observedget_device_status
    • First observedlock_door
    • First observedping
    • First observedset_temperature
    • First observedswitch_control

TDQS

A3.9/5.0
Disambiguation5/5

Each tool serves a unique purpose: health check, read all devices, control lights, lock door, set thermostat. No overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (ping, get_device_status, switch_control, lock_door, set_temperature).

Tool Count5/5

5 tools cover the essential smart home operations without being excessive or insufficient. Well-scoped for a minimal server.

Completeness4/5

Core device types are covered (lock, switch, thermostat, sensors), but missing specific device querying or advanced features like scenes. Minor gaps.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Evin009/SmartRent-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server