Skip to main content
Glama
madhukeshm

LG Washer MCP Server

by madhukeshm

LG Washer MCP Server

An MCP server that lets an AI assistant monitor and control an LG ThinQ washing machine through LG's official ThinQ Connect API.

It talks to the REST API directly over HTTP (no LG SDK). Your Personal Access Token (PAT) is used as a bearer token.

How the API works (the short version)

  • Auth: Authorization: Bearer <PAT>. No OAuth flow.

  • Region: your country code picks the server. India (IN) → https://api-kic.lgthinq.com.

  • Every request also sends x-country, x-client-id (a UUID4 you choose), x-api-key (a public key), x-message-id (fresh per request), x-service-phase: OP.

  • Endpoints: GET /devices, GET /devices/{id}/profile, GET /devices/{id}/state, POST /devices/{id}/control.

Related MCP server: ThinQ Connect MCP Server

Tools exposed

Tool

What it does

list_devices

Find your washer's deviceId.

get_washer_profile

See the controllable properties/values for your model.

get_washer_status

Live state: running?, cycle, time remaining.

control_washer

START / STOP / WAKE_UP.

control_washer_raw

Send an arbitrary control JSON for model-specific properties.

⚠️ Most LG washers only accept a remote START when the machine is physically set to "Remote Start" with a cycle already loaded. The API resumes/starts a pre-selected cycle; it usually can't pick a wash program from scratch.

Setup

uv sync
cp .env.example .env   # then edit .env with your PAT

Run it

Configuration is read from environment variables (THINQ_PAT, THINQ_COUNTRY, THINQ_CLIENT_ID). The server speaks MCP over stdio.

THINQ_PAT=xxx THINQ_COUNTRY=IN uv run washer-mcp

Wire into Claude Desktop / Claude Code

Add to your MCP config (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "lg-washer": {
      "command": "uv",
      "args": ["--directory", "/Users/sushmanagaraj/c_drive/Coding/LG", "run", "washer-mcp"],
      "env": {
        "THINQ_PAT": "your-pat-here",
        "THINQ_COUNTRY": "IN",
        "THINQ_CLIENT_ID": "your-uuid4-here"
      }
    }
  }
}

For Claude Code specifically:

claude mcp add lg-washer --env THINQ_PAT=xxx --env THINQ_COUNTRY=IN -- uv --directory /Users/sushmanagaraj/c_drive/Coding/LG run washer-mcp

Quick manual test (no MCP client needed)

uv run python -c "import asyncio, os; from washer_mcp.thinq_client import ThinQClient; \
print(asyncio.run(ThinQClient(os.environ['THINQ_PAT'],'IN',os.environ.get('THINQ_CLIENT_ID','test-id')).list_devices()))"

Available Tools

5 tools
control_washerA

Start, stop, power off, or wake the washer.

operation must be one of: START, STOP, POWER_OFF, WAKE_UP. location is the device zone from the profile (default "MAIN"). Location- scoped washers reject commands that omit it (API error code 2207).

Note: most LG washers only accept a remote START when the machine has been physically set to "Remote Start" and a cycle is already selected/loaded. The API pauses/resumes or starts a pre-selected cycle; it generally cannot pick a wash program from scratch. Call get_washer_profile first to confirm the model supports the operation and to see the exact accepted values.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationNoMAIN
device_idYes
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/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 explains that location-scoped washers reject omitted location with error 2207, and that the API generally cannot pick a wash program from scratch. These are meaningful behavioral caveats beyond a simple 'control' summary.

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 well-structured: a one-line action summary, a concise parameter block, and a compact caveat paragraph. Every sentence adds information, and the critical remote-start limitation is front-loaded where the agent will notice it.

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?

The description covers operation constraints, location behavior, an error code, and the key prerequisite of calling get_washer_profile first. With an output schema present and no nested objects, the agent has enough to invoke the tool correctly; the only minor gap is explicit routing to control_washer_raw.

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 must compensate, and it does: it enumerates valid operation values, explains location's default and scope behavior, and points to get_washer_profile for exact accepted values. device_id is not elaborated, but its meaning is clear from the name and context.

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 opening line names a specific action set — start, stop, power off, or wake — on a washer, so the tool's purpose is immediately clear. It is distinguishable from the read/profile siblings because it is explicitly the mutation/control tool. The operation list removes ambiguity about what this tool can do.

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

Usage Guidelines4/5

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

The description gives concrete preconditions: call get_washer_profile first, confirm model support, and note that a remote START requires a physically selected/loaded cycle. It does not explicitly mention when to use control_washer_raw instead, but it provides enough context to know when this tool is appropriate.

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

control_washer_rawA

Escape hatch: send an arbitrary control payload to the washer.

control_json is a JSON object matching the shape shown in the device profile, e.g. {"operation": {"washerOperationMode": "START"}}. Use this for model-specific properties (timers, remote-control toggles, etc.) that the higher-level tools do not cover.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
control_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/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. It discloses that this is a raw/escape-hatch tool that sends arbitrary payloads, implying low-level access and potential risk. However, it doesn't disclose what happens on invalid payloads, whether the device state could be corrupted, or any error behavior. The description adds some context but could be more explicit about the risks of using a raw control.

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

Conciseness4/5

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

The description is concise and front-loaded with the purpose ('Escape hatch'). The example is helpful and the explanation of when to use it is clear. No wasted words, though the structure could be slightly improved by separating the example from the usage guidance.

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 complexity (raw control with arbitrary JSON), the description provides a reasonable starting point but lacks details on error handling, validation, or the exact source of the device profile. The output schema exists but the description doesn't mention what the response looks like. For a raw escape hatch, more cautionary context would be valuable.

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 0%, so the description must compensate. It explains that control_json is a JSON object matching the device profile shape and gives an example. However, it doesn't explain the format of device_id (e.g., is it a string ID from list_devices?) or provide more detail on the expected JSON structure beyond one example. The description adds meaning but leaves some 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 tool's purpose: sending an arbitrary control payload to the washer, and explicitly positions it as an 'escape hatch' for model-specific properties not covered by higher-level tools. This distinguishes it from the sibling control_washer, which presumably handles standard operations.

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

Usage Guidelines4/5

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

The description provides clear guidance on when to use this tool: for model-specific properties (timers, remote-control toggles) that higher-level tools do not cover. It implies that for standard operations, one should use control_washer instead, though it doesn't explicitly name the alternative or state 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.

get_washer_profileA

Get a washer's capability profile: the exact controllable properties and their allowed values for THIS specific model. Consult this before controlling, because property names/values vary by model.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It implies a read-only consult operation but never explicitly states it has no side effects or how the response relates to later control calls. The existence of an output schema covers return values but not behavioral expectations.

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 filler. The purpose is front-loaded, and the usage directive is immediately actionable. The warning about variability is essential and placed naturally.

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?

For a single-parameter getter, the description conveys purpose and usage timing. An output schema (present) presumably defines return shapenovides the response structure. The main gap—explicit read-only behavior—is minor given the tool's nature and presence of output schema.

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?

Only one parameter (device_id) with 0% schema coverage thresholds compensation. The description implicitly ties device_id to identifying a specific washer, but does not clarify format, source, or relationship to list_devices. It adds some meaning but not enough to fully offset the missing schema descriptions.

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?

States a specific verb ('get') and resource ('capability profile'), explicitly says it covers controllable properties and allowed values, and its purpose is clearly differentiated from siblings like control_washer and get_status. 'Property names/values vary by model' makes the scope concrete.

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

Usage Guidelines4/5

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

Gives an explicit directive: 'Consult this before controlling', which tells the agent when to use it. It doesn't name alternatives or exclusions, but the guidance is clear enough to route an agent to this tool before a control action.

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

get_washer_statusA

Get the washer's current live state: whether it is running, the current cycle/run state, and remaining time.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. 'Get' clearly signals a read-only operation, and 'current live state' indicates a real-time query rather than a cached or historical read. It also discloses the reported fields, though it does not address error cases like offline devices.

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?

A single, front-loaded sentence with no filler. Every clause adds useful detail about the state fields returned.

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?

For a simple one-parameter status getter with an output schema, the description explains the purpose and key returned state fields well. It is slightly incomplete because it omits explicit device_id guidance and usage boundaries, but these are easy to infer from the schema and sibling names.

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

Parameters2/5

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

Schema description coverage is 0%, and the description never mentions device_id or how it should be supplied. The parameter name is self-explanatory, but the description adds no value beyond the schema and does not compensate for the low coverage.

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 names a specific verb ('Get'), a resource ('washer's current live state'), and three concrete data points (running, cycle/run state, remaining time). This clearly differentiates it from siblings like get_washer_profile (static profile) and control_washer (mutation).

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?

Usage is implied by the verb and the 'live state' phrasing, but the description does not explicitly say when to prefer this over get_washer_profile or mention that control_washer should be used for changing state. No exclusions or alternative conditions are stated.

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 LG ThinQ devices on the account. Use this to find the washer's deviceId, which every other tool needs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

There are no annotations provided, so the description must carry the burden of explaining behavior. It mentions that the tool returns device information sufficient to find the washer's ID, but it does not describe the exact format of the response (e.g., whether it returns a list of objects with fields like 'deviceId' and 'model'). This lack of output detail leaves some behavioral aspects unspecified, though the core purpose is clear.

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 two sentences long, with the verb and resource in the first sentence and a clear usage directive in the second. It is concise, direct, and front-loads the essential information. Every word contributes to understanding the tool's purpose and usage, making it highly efficient.

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?

The description is complete for the tool's role: it lists devices and explicitly mentions finding the washer's deviceId for other tools. Given that there are no parameters, no output schema, and no annotations, the description provides the necessary context to call the tool correctly and understand its place in the workflow. It could benefit from stating the response format, but for a simple read-only list, the current level is adequate.

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, and the schema covers this completely (there is nothing to document). According to the rubric, with 0 parameters the baseline is 4, meaning the description doesn't need to add parameter explanations. The description is consistent with this and doesn't introduce any confusion about inputs.

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 (List) and the resource (all LG ThinQ devices on the account), and it distinguishes this tool from siblings by specifying that it's used to find the washer's deviceId that other tools need. This makes the purpose unambiguous and directly relevant to the tool's role in the workflow.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool: 'Use this to find the washer's deviceId, which every other tool needs.' This provides a direct usage instruction and implies that it should be called before other tools. It leaves no ambiguity about the sequence of operations.

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. 5 tool updatesv0.1.0
    • First observedcontrol_washer
    • First observedcontrol_washer_raw
    • First observedget_washer_profile
    • First observedget_washer_status
    • First observedlist_devices

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation4/5

Most tools are clearly distinct: listing devices, fetching profile, fetching status, and sending commands all serve different purposes. The only mild overlap is between control_washer and control_washer_raw, but the descriptions make the intended boundary clear.

Naming Consistency5/5

All tools follow a clean snake_case verb_noun pattern: list_devices, get_washer_profile, get_washer_status, control_washer, control_washer_raw. The naming is consistent and predictable.

Tool Count5/5

Five tools is well-scoped for an LG washer MCP server: discovery, model introspection, status, high-level control, and a raw escape hatch. Each tool earns its place without adding redundancy.

Completeness4/5

The server covers the core washer workflow: find the device, inspect its capability profile, read live status, and issue commands. The raw control tool helps fill model-specific gaps, though common operations like pause/resume are not explicitly exposed beyond the raw payload path.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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