Skip to main content
Glama
shark-fi

unifi-talk-mcp

by shark-fi

unifi-talk-mcp

A Model Context Protocol server for UniFi Talk, Ubiquiti's phone system: call history, call timelines and transcriptions, users and extensions, phone numbers, devices, ring groups, queues, IVR, service health, and usage.

Unofficial. Ubiquiti publishes no Talk API. This server uses the private API behind the Talk web UI, as documented by the reverse-engineering project millsbrandon/UniFi-Talk-API against Talk 5.1.2. Any Talk update can rename or remove endpoints.

How it works

Talk does not accept UniFi integration API keys. It sits behind the UniFi OS web session, so the server logs in to /api/auth/login with a local account, holds the session cookie and CSRF token in memory, and logs in again when the session expires. Login happens on the first tool call, not at startup.

Tools

Tool

Purpose

talk_status

Talk version and region, console summary, service health

talk_list_calls

Paginated call history (page, per_page)

talk_get_call

Event timeline and transcription for one call

talk_list_devices

Phones and softphones: user, ext, status, SIP registration, last seen, firmware

talk_list_endpoints

Catalog of known endpoints with parameters, filterable by area

talk_get

Call any read endpoint by id (users, numbers, devices, ring groups, config…)

talk_invoke

Call a write endpoint by id. Disabled unless TALK_ALLOW_WRITES=true

Safety

  • Read-only by default. talk_invoke refuses every call unless TALK_ALLOW_WRITES=true.

  • Secrets are always redacted. SIP registration passwords, SIP trunk credentials, PINs, device key hashes, and tokens are replaced with [redacted] before results reach the model.

  • Redacted values can't be written back. talk_invoke rejects any body containing [redacted], so a read-modify-write can't overwrite a real SIP password with the placeholder.

  • Path parameters are validated. IDs can't contain / or dot segments, so calls can't escape /proxy/talk/api.

  • Left out on purpose: binary downloads (recordings, greetings, PCAPs), file uploads, and writes that would need credentials typed into chat (SIP trunks, third-party SIP devices).

Related MCP server: unifi-mcp

Setup

1. Create a dedicated local account

In UniFi OS on the console that runs Talk, open Admins & Users and create an admin:

  • Choose Restrict to local access only. Cloud (UI.com) accounts and accounts with MFA can't sign in through /api/auth/login.

  • Give it the least-privileged Talk role that covers what you need, and no access to other apps.

2. Build

Requires Node.js 22 or later.

npm install
npm run build
npm test

3. Configure your MCP client

Variable

Required

Default

Description

TALK_BASE_URL

yes

Console address, e.g. https://192.168.1.1

TALK_USERNAME

yes

Local UniFi OS account

TALK_PASSWORD

yes

Its password

TALK_ALLOW_WRITES

no

false

Enable talk_invoke

TALK_CA_CERT

no

Path to the console's CA certificate (PEM)

TALK_INSECURE_TLS

no

false

Skip TLS verification. Last resort

TALK_TIMEOUT_MS

no

30000

Per-request timeout

Claude Desktop: merge this into mcpServers in ~/Library/Application Support/Claude/claude_desktop_config.json, then restart the app. Use absolute paths; GUI apps don't inherit your shell's PATH (command -v node gives yours).

"Unifi-talk": {
  "command": "/usr/local/bin/node",
  "args": ["/absolute/path/to/unifi-talk-mcp/dist/index.js"],
  "env": {
    "TALK_BASE_URL": "https://192.168.1.1",
    "TALK_USERNAME": "talk-mcp",
    "TALK_PASSWORD": "…",
    "TALK_CA_CERT": "/absolute/path/to/console-ca.pem"
  }
}

Claude Code:

claude mcp add unifi-talk -s user \
  -e TALK_BASE_URL=https://192.168.1.1 \
  -e TALK_USERNAME=talk-mcp \
  -e TALK_PASSWORD=… \
  -- node /absolute/path/to/unifi-talk-mcp/dist/index.js

TLS

UniFi consoles use self-signed certificates issued to unifi.local, which never match the address you connect to. Save the console's certificate as a PEM file and point TALK_CA_CERT at it. The server trusts that certificate, and it accepts the hostname mismatch only when the console presents that exact certificate (matched by SHA-256 fingerprint). Any other certificate is rejected.

Before trusting the saved file, compare its fingerprint with the one your browser shows for the console. If UniFi OS regenerates its certificate (after a reset, for example), connections fail until you save the new one.

TALK_INSECURE_TLS=true turns verification off entirely and prints a warning at startup. Use it only as a last resort.

Smoke test

npm run smoke

With no TALK_* variables set, the test runs offline: it starts the server against a closed local port and checks tool registration, input validation, the write gate, and error reporting.

With TALK_BASE_URL, TALK_USERNAME, and TALK_PASSWORD exported, it runs live, read-only calls (talk_status, one call-log record, users, devices) and prints only success and field names, never data.

Troubleshooting

Symptom

Cause

fatal: Missing required environment...

The client config doesn't pass TALK_* variables

UniFi OS login failed (HTTP 401/403)

Wrong credentials, a cloud account, or MFA enabled

rate limited (HTTP 429)

Too many logins; wait a few minutes

TLS verification failed

Self-signed certificate; set TALK_CA_CERT

returned HTML instead of JSON

Talk isn't installed on this console, or the endpoint changed in your Talk version

Cannot reach …: ECONNREFUSED

Wrong address, or HTTPS isn't reachable from this machine

Known gaps

  • No real-time events (Talk's WebSocket at /proxy/talk/ws).

  • No recording or voicemail audio downloads; voicemail audio has no HTTP endpoint at all.

  • Sending SMS: the endpoint is unknown.

  • Endpoints marked candidate in talk_list_endpoints haven't been confirmed on a live console.

Available Tools

7 tools
talk_getRead from TalkB
Read-only

Call any read-only Talk endpoint by id. See talk_list_endpoints for descriptions and parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
endpointYes
path_paramsNoValues for {placeholders} in the endpoint path, e.g. {"uuid": "..."}

TDQS

B3.1/5.0
Behavior2/5

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

The description restates the read-only nature already captured by readOnlyHint: true, but adds no additional behavioral context such as authentication requirements, pagination, error behavior, or response shape. With the annotation covering the safety profile, the description contributes little beyond redundant restatement.

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 concise sentences with no filler: the first defines the operation, and the second points to the right reference resource. It is appropriately front-loaded and every clause 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 description offloads endpoint-specific details to talk_list_endpoints, which is reasonable for a generic read-only dispatcher. However, with no output schema and no mention of response variability, errors, or how query parameters are used, the description is minimally sufficient rather than complete on its own.

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 only 33%, and the description does not explain query or endpoint parameters directly. It points to talk_list_endpoints for descriptions and parameters, but this is an external reference rather than added semantic meaning for this tool's own parameters. Only path_params is partially documented in the schema.

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?

Description clearly states: 'Call any read-only Talk endpoint by id.' This is a specific verb and resource, and the read-only qualifier distinguishes it from talk_invoke. It relies on the sibling talk_list_endpoints for endpoint specifics, but the basic purpose is unambiguous.

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 phrase 'See talk_list_endpoints for descriptions and parameters' provides useful direction for looking up endpoint details. However, there is no explicit statement about when to prefer this tool over other siblings like talk_get_call or talk_list_calls, so usage guidance is mostly implied rather than explicit.

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

talk_get_callGet call detailsA
Read-only

Event timeline and transcription (if enabled) for one call, by the uuid from talk_list_calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context about what is returned (timeline and transcription, if enabled) and the single-call scope, but it does not disclose output format, pagination, or behavior when transcription is disabled.

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?

One sentence with no filler: it front-loads the two key outputs (timeline, transcription) and then specifies the identifier source. Every word earns its place.

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 one-parameter read-only tool, the description tells what is returned, the source of the required identifier, and the transcription caveat. It omits secondary details like output structure or error behavior, but nothing essential for correct invocation is missing.

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 only defines uuid as a non-empty string with no further meaning. The description compensates by explaining that the uuid comes from talk_list_calls, giving the parameter provenance and purpose. For a single parameter with 0% schema coverage, this is sufficient though minimal.

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 states a specific resource (event timeline and transcription for one call) and the retrieval action, and it distinguishes the tool by tying the identifier to the uuid produced by talk_list_calls. This clearly separates it from listing, status, and generic get siblings.

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 phrase 'by the uuid from talk_list_calls' gives clear context: obtain the call identifier from the list tool first, then use this tool for that specific call. It does not explicitly state exclusions or alternative tools, so it stops 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.

talk_invokeChange Talk configurationA
Destructive

Call a Talk endpoint that changes or deletes data. Disabled unless the server runs with TALK_ALLOW_WRITES=true. Confirm with the user before calling. See talk_list_endpoints for body shapes.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body
endpointYes
path_paramsNoValues for {placeholders} in the endpoint path, e.g. {"uuid": "..."}

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds important behavioral context: the server flag requirement, the need for user confirmation, and the fact that the tool changes or deletes data. This is consistent with the annotations and goes beyond what structured metadata alone provides.

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?

Four short sentences, each earning its place: purpose, prerequisite, user-confirmation requirement, and a pointer to more detail. It is front-loaded with what the tool does and wastes no words.

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 generic write/delete invocation tool, the description covers the critical constraints: destructive nature, server flag, user confirmation, and where to find body shapes. It does not describe return or error format, but with no output schema and a wide endpoint enum, the essentials for calling it correctly are present.

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 coverage is 67%, so the description is not fully responsible for parameter documentation. The description does help with the body parameter by pointing to talk_list_endpoints for body shapes, but it does not add meaning for the endpoint enum values or path_params beyond what the schema already provides.

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 a specific action: 'Call a Talk endpoint that changes or deletes data.' This distinguishes it from the read-oriented siblings (talk_status, talk_list_calls, talk_get) and gives the agent a clear sense of when this tool is relevant.

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 conditions for use: it requires TALK_ALLOW_WRITES=true and instructs the agent to confirm with the user before calling. It also points to talk_list_endpoints for body shapes. However, it does not explicitly state 'use the read-only siblings for reads,' though this is strongly implied.

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

talk_list_callsList callsB
Read-only

Call history with caller ID, direction, status, and voicemail data. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already covers safety, and the description adds pagination behavior and response content. However, it does not disclose ordering, date range, rate limits, or other operational traits that would provide richer behavioral context beyond the annotation.

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 concise sentence with no filler. The primary purpose is front-loaded, and the pagination note is compact and relevant.

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?

For a simple read-only list tool, the description is minimally adequate: it states what is returned and that results are paginated, and the schema provides page/per_page constraints. However, with no output schema and no usage guidance, the description leaves the agent with limited contextual knowledge about response shape or how this list differs from other list tools.

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 only contains 'Paginated' to hint at the page and per_page parameters. It does not explain how pagination works, default behavior beyond the schema values, or any trade-offs of using these parameters.

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 lists call history and specifies the contained data fields (caller ID, direction, status, voicemail). The resource is identifiable, though it does not explicitly differentiate itself from sibling tools like talk_get_call or talk_list_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 is given for when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or scenarios favoring another sibling, leaving the agent to infer usage from the name alone.

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

talk_list_devicesList devicesB
Read-only

Talk desk phones and softphone apps with user, extension, status, SIP registration, last seen, IP, and firmware. A compact view of the devices endpoint; filter by status or kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
statusNo

TDQS

B3.1/5.0
Behavior3/5

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

The annotations already declare readOnlyHint: true, so the read-only nature is covered. The description adds context about the response content (fields included) and the 'compact view' nature, which is useful. However, it does not disclose pagination, limits, or behavior when filters are omitted, which would be valuable for a list endpoint.

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 with no filler. The primary purpose and key attributes are front-loaded, and the filtering capability is mentioned concisely. Every word contributes to understanding the tool's function.

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 there is no output schema, the description should explain the return structure. It lists the fields returned (user, extension, status, SIP registration, last seen, IP, firmware), which is helpful. However, it omits details like pagination, ordering, or how to interpret the 'compact' nature. For a simple list with two optional filters, the description is adequate but not fully complete.

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%, so the description must compensate. It mentions 'filter by status or kind', which indicates the parameters are filters, but it does not elaborate on default behavior (e.g., if omitted, all devices returned) or the exact meaning of each filter. The enums in the schema provide allowed values, but the description adds minimal semantic value beyond labeling them as filters.

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 it lists desk phones and softphone apps with specific attributes (user, extension, status, etc.), and mentions filtering. It identifies the resource (devices) and the action (list), making the purpose unambiguous. However, it does not explicitly differentiate from siblings like talk_list_endpoints, relying on the reader to infer the distinction.

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 only mentions that filtering is possible by status or kind, but provides no guidance on when to use this tool versus alternatives such as talk_list_endpoints or talk_list_calls. There is no mention of scenarios, prerequisites, or when this tool is preferred, leaving the agent to guess.

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

talk_list_endpointsList Talk endpointsA
Read-only

Catalog of known UniFi Talk API endpoints (users, numbers, devices, routing, voicemail, billing, and more) with their parameters. Use it to find an endpoint id for talk_get or talk_invoke.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoOnly list endpoints in this area

TDQS

A4/5.0
Behavior3/5

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

The readOnlyHint annotation already declares that this is a read-only operation, and the description's word 'Catalog' reinforces a non-mutating reference role. However, the description does not add meaningful behavioral detail beyond the annotation, such as return shape, pagination, or side-effect caveats.

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 with no filler. The first sentence immediately states what the tool is, and the second sentence gives actionable guidance on how to use the result, front-loading the most important information.

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 optional-filter catalog tool, the description is largely complete: it conveys the tool's scope, content, and relationship to sibling tools, while the schema covers the filter parameter. The absence of an explicit output shape description is a minor gap, but not enough to make the tool hard to invoke correctly.

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%, and the single optional 'area' parameter has an enum with a description in the schema, so the description does not need to explain parameters. The text focuses on the tool's purpose rather than adding new meaning to the parameter.

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 uses a specific verb and resource: it is a 'Catalog of known UniFi Talk API endpoints' with their parameters, and it explicitly frames the tool as a lookup aid for talk_get or talk_invoke. This clearly distinguishes it from sibling tools that list or invoke specific resources.

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 clear context by saying 'Use it to find an endpoint id for talk_get or talk_invoke,' which tells the agent exactly when the tool is relevant. It does not provide explicit 'when not to use' guidance or compare against every sibling, so it stops 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.

talk_statusTalk statusA
Read-only

Talk version and region, console summary, and service health. A good first call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation already signals a safe read operation, and the description aligns with that. It adds value by enumerating the reported categories (version, region, console summary, service health). It does not disclose details like response format or whether health checks involve latency, but this is acceptable given the 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?

Two short sentences contain all necessary information with no filler. The output scope is front-loaded and the usage hint is a compact second sentence. Every word earns its place.

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 parameterless read-only status tool, the description covers the key outputs and gives a clear first-call hint. Without an output schema, it could specify the exact response shape, but the listed categories are sufficient for a simple health/status 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 input schema is empty and has 100% schema description coverage by default. With zero parameters, the description has no parameter semantics to add. The baseline for a no-parameter tool is 4, and nothing in the description detracts from that.

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 lists concrete outputs: version, region, console summary, and service health, making the resource clear. It distinguishes itself from the sibling list/get/invoke tools as a status overview rather than a data retrieval or action tool. It lacks an explicit verb like 'returns' or 'reports', but the intent is unambiguous.

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?

'A good first call' gives clear contextual guidance about when to use it: as an initial check before other operations. However, it does not explicitly state when not to use it or name alternatives among the siblings. The usage guidance is implied rather than fully specified.

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. 7 tool updatesv0.1.0
    • First observedtalk_get
    • First observedtalk_get_call
    • First observedtalk_invoke
    • First observedtalk_list_calls
    • First observedtalk_list_devices
    • First observedtalk_list_endpoints
    • First observedtalk_status

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have clearly distinct purposes: status, write operations, call history, call detail, devices, endpoint catalog, and generic reads. Slight overlap exists between talk_get_call (specialized call timeline) and talk_get (generic read by endpoint id), but descriptions clarify the intended use.

Naming Consistency4/5

All tools share the talk_ prefix and mostly follow verb_noun (talk_list_calls, talk_get_call, talk_list_devices). talk_status and talk_invoke deviate slightly from the pattern, but the naming remains predictable and readable.

Tool Count5/5

Seven tools is well-scoped for a UniFi Talk integration: a status check, a write dispatcher, a catalog of endpoints, and a few high-value read wrappers. Each tool earns its place without redundancy or bloat.

Completeness5/5

The combination of generic talk_get for reads, talk_invoke for writes, and talk_list_endpoints for discoverability covers the full API surface. Convenience tools for calls and devices cover the most common workflows, so there are no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only querying of a UniFi fleet via the Site Manager API and per-console connector proxy, allowing users to list hosts, sites, devices, ISP metrics, and live network clients through Claude.
    Academic Free v1.1
  • A
    license
    A
    quality
    A
    maintenance
    Provides read-only access to UniFi Network consoles for sites, devices, clients, vouchers, networks, Wi-Fi, and firewall configuration, with optional opt-in tools for controlled write operations and legacy controller support.
    14
    63 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Queryable UniFi API documentation for Network, Protect, Site Manager, InnerSpace, Mobility and Carrier Fabric - endpoint search, schema drill-down and code examples in five languages. Read-only: it serves scraped docs and never connects to a controller.
    12
    10
    119 PyPI
    37
    MIT