Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
co.build is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Open-source mods for the devices you own, with owner reports on what works.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http co-build-mcp https://co.build/mcp
# 2 — ask your agent for something these tools do
# prepare_installation_report, publish_installation_report, prepare_feedback and 20 more
co.build costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http co-build-mcp https://co.build/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
23 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
After setup, ask the owner whether they want to share before preparing a sanitized draft. Include high-value notes for the next owner: actual setup time, prerequisites the README omits (required keys or accounts, cables, OS versions), steps actually taken, and useful tips. Keep notes short and factual. Write commands, flags, environment variable names, versions and public links (like a vendor's de
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | Mod slug or mod: search ID. |
| deviceId | string | yes | Device slug or device: search ID. |
| modelId | yes | — | |
| agentClient | string | no | — |
| agentModel | no | — | |
| firmware | yes | — | |
| modVersion | yes | — | |
| platform | yes | — | |
| installation | string | yes | — |
| functionality | string | yes | — |
| evidence | string | yes | — |
| tested | string | yes | — |
| blockedOn | string | yes | — |
| resolution | string | yes | — |
| setupMinutes | no | Actual setup time in minutes, if known | |
| prerequisites | string | no | Required keys, accounts, cables or OS versions missing from the README; no secrets |
| steps | string | no | Short factual steps actually taken |
| tips | string | no | Useful technical tips for the next owner; no personal data, logs or health readings |
Publish the saved installation report preview under the connected user's public co.build account. Updating an existing report replaces its public text. Requires explicit user approval of the exact preview and public attribution. Pass the draftId returned by prepare_installation_report, its unchanged digest and consentVersion (installation-report-v1), and approved:true only after that approval. OAu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | — |
| digest | string | yes | — |
| consentVersion | string | yes | — |
| approved | boolean | yes | — |
After the owner has actually used a mod and agreed to leave feedback, prepare a private preview of a public post on its co.build page. kind: comment (praise, a bug, friction), feature_request (something it can't do yet), reply (to parentId, any entry on this mod), or support (upvote the feature request parentId, with the owner's note as an optional reply). text is the owner's own words, quoted or
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | Mod slug or mod: search ID. |
| kind | string | yes | — |
| parentId | string | no | For reply or support: the entry id from get_feedback (for support, a featureRequest entry). |
| text | string | no | The owner's own words, quoted or lightly tidied; never add opinions. Required except for support. |
| tried | string | no | What the owner tried, if they said. |
| expected | string | no | What they expected to happen. |
| actual | string | no | What happened instead. |
| deviceId | string | no | The device it was used with, if not the mod's own: a slug or device: ID. |
| modelId | no | Exact hardware model ID from get_device, only if confirmed. | |
| firmware | no | Device firmware, only if confirmed. | |
| modVersion | no | The mod's version, only if confirmed. | |
| platform | no | — |
Post the saved feedback preview under the connected user's public co.build account. The mod's maintainer is notified as for a comment on the website. Requires explicit approval of the exact action and public text. Pass the draftId from prepare_feedback, its unchanged digest and consentVersion (agent-feedback-v1), and approved:true only after that approval. OAuth consent is not approval. Retrying t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | — |
| digest | string | yes | — |
| consentVersion | string | yes | — |
| approved | boolean | yes | — |
Defenders: a volunteer malware check of one whole mod co.build lists. Only when the user asked you to spend their quota on it; never start on your own. A standing schedule the user set up counts as asking. Returns one task as data, or task: null when nothing is due (then stop). When the user asks to retry, pass retryTaskId from your own submitted could_not_review. It creates a new lease for exactl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| retryTaskId | string | no | Your submitted could_not_review task to retry at the same commit and part |
Submit your check of a get_review_task task before its lease expires. verdict: no_issues_found (you read every readingPlan group, readingPlan.unread aside, and nothing crosses the bar), risky, malicious, or could_not_review with a reason. risky is a HIGH bar: only obviously bad practice in code that runs when an owner follows the README or setup steps or uses the mod, such as executing code fetche
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskId | string | yes | The taskId from get_review_task. |
| verdict | string | yes | — |
| reason | string | no | Only with could_not_review. |
| findings | array | no | Only with risky or malicious: the 5 most important, most severe first. |
| filesRead | integer | yes | How many files you read in full. |
| agentClient | string | yes | — |
| agentModel | no | The model that did the review (this subagent's), self-reported: claude-opus-5-5 or gpt-6.1-sol. Anything else is recorded as unknown. | |
| usage | object | no | Optional: tokens this review used, if your app reports them (e.g. Claude Code's /cost or Codex's token count). Leave out if unsure. |
| checklistVersion | string | yes | The task's checklistVersion. |
After the main session submits one whole-mod review, report exact usage summed across its reviewing subagents: taskId, inputTokens (uncached), outputTokens, cacheReadTokens and cacheWriteTokens. All four counts are required together. totalTokens alone remains a fallback with unknown split. Claude Code: read transcripts by agentId, counting each assistant message.id once, never its displayed contex
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskId | string | yes | The whole-mod task submitted by this account. |
| totalTokens | integer | no | Fallback only: processed total with unknown split. |
| inputTokens | integer | no | Uncached input tokens. |
| outputTokens | integer | no | — |
| cacheReadTokens | integer | no | — |
| cacheWriteTokens | integer | no | — |
Ends your own unsubmitted get_review_task lease now, without a verdict, so the mod goes back in the pool. When you stop early (the user says stop, an error, a limit), release every task you haven't submitted, then delete its folder. Only your own tasks; calling it again is a no-op, and released: false means it was already submitted. A released task can't be submitted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| taskId | string | yes | Your own task from get_review_task that you won't submit. |
Every install reads the code first. Before running anything from a mod you're setting up for the user, download the exact commit you'll install from GitHub (get_mod's safety.setup.install.sha by default, or the newer commit the user chose) into a new, empty temp folder, read all of it, then submit what you found here: modId, the full commitSha, and the same verdict, findings and bar as a review. r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | The mod's slug from get_mod, without the mod: prefix. |
| commitSha | string | yes | The full 40-character commit you read and are installing. |
| verdict | string | yes | — |
| reason | string | no | Only with could_not_review. |
| findings | array | no | Only with risky or malicious: the 5 most important, most severe first. |
| filesRead | integer | yes | How many files you read in full. |
| agentClient | string | yes | — |
| agentModel | no | The model that did the review (this subagent's), self-reported: claude-opus-5-5 or gpt-6.1-sol. Anything else is recorded as unknown. | |
| usage | object | no | Optional: tokens this review used, if your app reports them (e.g. Claude Code's /cost or Codex's token count). Leave out if unsure. |
| checklistVersion | string | yes | The task's checklistVersion. |
Read the connected user's private saved devices, including typed-in devices, together with devices from their approved installation reports. Use when the user asks what they own. Only the connected account is returned; this does not publish ownership.
No parameter schema on file.
Read the connected user's current, public installation reports for follow-up or correction, and to recognize mods they use. Entries include newerRelease (version, url, publishedAt) or null, and lastFeedbackAt: when they last posted other feedback on that mod, or null. When an installation has a newer release, offer to update and retest, then prepare a fresh report; never retest or publish without
| Parameter | Type | Required | Notes |
|---|---|---|---|
| offset | integer | no | — |
After the user explicitly asks to withdraw this report, remove its public feedback and installation count and cancel pending email follow-ups. Requires ownership. The withdrawn text is not restored; the user can later approve a new report for the same device, which is posted as a new comment.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reportId | string | yes | — |
| approved | boolean | yes | — |
Schedule one installation check-in email for 1–72 hours from now, only after the user explicitly requests or agrees to that email. Delivery is to the connected account's verified email address. Scheduling authorizes that email, not publication of future feedback. An email already being sent or delivered cannot be recalled. Each report allows one check-in: retrying while pending returns the existin
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reportId | string | yes | — |
| delayHours | integer | yes | — |
| channel | string | yes | — |
| approved | boolean | yes | — |
Permanently cancel the connected user's pending installation check-in email at their explicit request. Leaves the installation report unchanged. Its one check-in cannot be restored or scheduled again. An email already sent or being sent cannot be recalled; the result returns cancelled:false with its status.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| followupId | string | yes | — |
Public distinct-owner counts for a catalog mod. Counts are user reports, not verified installations or success rates. An installation can be complete while functionality remains untested.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | A catalog mod slug or mod: ID. |
Find devices and public-source mods by device name, model, feature, or project name. Use concise keywords, e.g. 'WHOOP', 'Kindle', or 'sleep export'. Returns descriptions and up to 20 matches per page. Pass nextOffset as offset with the same query and filters to continue. Use type: mod to skip devices, or deviceId/platform/kind/dataSource/needsSubscription/maxSetupMinutes to constrain mods. Filter
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Concise keywords, not a sentence. Use filters for constraints. |
| type | string | no | — |
| deviceId | string | no | Restrict to this device, including explicitly linked cross-device mods. |
| platform | string | no | Require documented works or partly support; unknown support is excluded. |
| kind | string | no | — |
| dataSource | string | no | Catalog data source, not a guarantee of offline operation. |
| needsSubscription | boolean | no | false requires an explicit no-subscription claim; unknown is excluded. |
| maxSetupMinutes | integer | no | — |
| offset | integer | no | — |
| limit | integer | no | — |
Answer what's most popular or rising, as co.build/top ranks it: across all devices, for one kind of device (categoryId, from the returned categories) or for the user's devices (deviceIds). Top is what's most used and trusted, weighing real use, growth, conversation and who builds it; Rising is what's gaining fastest right now. Lists run short rather than pad. Each entry's traction shows the eviden
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sort | string | no | top: most used and trusted. rising: gaining fastest right now. |
| categoryId | string | no | One kind of device, from categories. Omit for all devices. |
| deviceIds | array | no | Only mods for these catalog devices (IDs from search or get_device), each at its best place among them. |
| offset | integer | no | — |
| limit | integer | no | — |
Read a device or mod found by search. Pass its exact prefixed ID, such as device:whoop or mod:open-health. Returns source text and a citation URL. Device results contain the first 20 mods; use get_device for further pages.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
List a device's models, available and requested features, curated picks and public mods. Each goal's picks explain which mod suits whom and its caveat; mod goalIds connect projects to features. Accepts a device slug or device: ID. Optional goalId and mod filters narrow mods, picks and totalMods; goal availability remains catalog-wide. Includes cross-device projects; their deviceId identifies the p
| Parameter | Type | Required | Notes |
|---|---|---|---|
| deviceId | string | yes | — |
| offset | integer | no | — |
| limit | integer | no | — |
| platform | string | no | Require documented works or partly support; unknown support is excluded. |
| kind | string | no | — |
| dataSource | string | no | Catalog data source, not a guarantee of offline operation. |
| needsSubscription | boolean | no | false requires an explicit no-subscription claim; unknown is excluded. |
| maxSetupMinutes | integer | no | — |
| goalId | string | no | — |
Get a mod's source, license, maintenance status, model and platform support, caveats, subscription needs and documented setup. Then call get_feedback with the same modId for community reviews, reports and upvotes before recommending. Accepts a mod slug or mod: ID. Model support and subscription fields refer to deviceId; cross-device claims are only in compatibility. Null/unknown fields are unverif
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | — |
Check real community experience before recommending a mod. Returns its co.build upvotes and paginated public comments, feature requests (featureRequest), replies and works/partly/broken reports with dates, helpful votes, model and firmware where supplied. Structured report details distinguish installation from tested functionality, with setup notes and newer-release context; a newer release is not
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | — |
| offset | integer | no | — |
| limit | integer | no | — |
| order | string | no | — |
| modelId | string | no | Exact reported model ID; entries without a model are excluded. |
| firmware | string | no | Exact reported firmware version; entries without a version are excluded. |
| featureRequests | boolean | no | true returns only feature requests, to find an existing one before posting another. Combine with order: helpful. |
After the user reports a setup outcome, prepare a co.build form link for them to review and submit. Does not post a comment, publish a result or change an account. Use only the outcome, model and firmware supplied or verified with the user; omit unknown fields. Never include credentials or personal details.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modId | string | yes | — |
| result | string | yes | — |
| model | string | no | — |
| firmware | string | no | — |
Compare up to four shortlisted mods in one call. Includes the same details as get_mod and three newest get_feedback entries per mod, plus optional device/model/platform fit. This replaces those separate reads when feedbackStatus is available. Errors are per item; retry unavailable feedback before recommending. Unknown support stays unknown; preserve partial-support notes. Subscription fields refer
| Parameter | Type | Required | Notes |
|---|---|---|---|
| modIds | array | yes | Up to four shortlisted mods. Accepts slugs or mod: IDs. |
| deviceId | string | no | — |
| modelId | string | no | Exact model ID from get_device. Requires deviceId. |
| platform | string | no | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install co.build or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| prepare_installation_report | state-write | state-write: declares readOnlyHint: false |
| publish_installation_report | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| prepare_feedback | state-write | state-write: declares readOnlyHint: false |
| publish_feedback | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| get_review_task | untrusted-inputstate-write | untrusted-input: keyword "fetch"; state-write: declares readOnlyHint: false |
| submit_review | state-write | state-write: declares readOnlyHint: false |
| report_review_usage | state-write | state-write: declares readOnlyHint: false |
| release_review_task | state-write | state-write: declares readOnlyHint: false |
| submit_install_check | untrusted-inputstate-write | untrusted-input: keyword "download"; state-write: declares readOnlyHint: false |
| get_my_devices | no tags | |
| get_my_installations | no tags | |
| withdraw_installation_report | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| schedule_installation_followup | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| cancel_installation_followup | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| get_installation_stats | no tags | |
| search | no tags | |
| get_top_mods | no tags | |
| fetch | untrusted-input | untrusted-input: keyword "fetch" |
| get_device | no tags | |
| get_mod | no tags | |
| get_feedback | no tags | |
| prepare_report_link | no tags | |
| compare_mods | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 0.6.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish co.build can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.