MCP Server for Z.AI - A Model Context Protocol server that provides AI capabilities
Tares 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
Always-on AI agents: a software factory for Claude Code, or an AI SRE that watches your systems.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user tares-mcp '--' uvx tares mcp --transport stdio
# 2 — ask your agent for something these tools do
# read, create_trigger, update_trigger and 59 more
Tares costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Tares as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user tares-mcp '--' uvx tares mcp --transport stdioReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take TARESD_URL (Address of the Tares the server talks to. Start one with `tares up`.), TARES_AUTH_TOKEN (Token or API key for a Tares that has auth on. Leave empty for a local Tares without auth.) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
62 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.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Read one correlated, time-ordered timeline of everything matching selector across all sources, or only a project's sources, or only the sources you name. selector is a {label: value} conjunction, matched with strict AND, e.g. {"repo": "frontend"} or {"service": "api-server", "endpoint":…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| selector | object | yes | — |
| window | string | no | — |
| include_payload | boolean | no | — |
| project | string | no | — |
| sources | array | no | — |
Create a trigger: a condition Tares evaluates continuously over one or more sources; when it trips, subscribed agents are woken with the correlated timeline. sources names the sources it watches (at least one). filters [{field, op, value}] (ops: eq, neq, in (a list), contains, gt, lt, gte,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| sources | array | yes | — |
| condition | object | yes | — |
| filters | array | no | — |
| key_field | string | no | — |
| emit | object | no | — |
| cooldown | string | no | — |
| project | string | no | — |
| description | string | no | — |
Edit an EXISTING trigger in place: replace its sources, filters, key_field, condition, emit and cooldown, and move it to another project when given. Create new triggers with create_trigger(); this only updates one that already exists (renaming isn't supported, so keep name the same).…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| sources | array | yes | — |
| condition | object | yes | — |
| filters | array | no | — |
| key_field | string | no | — |
| emit | object | no | — |
| cooldown | string | no | — |
| project | string | no | — |
| description | string | no | — |
Register a webhook to be woken (pushed) when a trigger fires. Returns a subscription id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| trigger | string | yes | — |
| url | string | yes | — |
List available sources, triggers and projects.
Takes no parameters.
Describe one catalog entry in full: schema (event types + typed fields, inferred from stored events), freshness, lineage, and sample records. Handles look like source:logs or trigger:error_spike. Use this to discover label names before creating a trigger or reading an unfamiliar source.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | yes | — |
Write an observation back to Tares's agent-memory lane. It becomes a source like any
| Parameter | Type | Required | Notes |
|---|---|---|---|
| key | string | yes | — |
| content | string | yes | — |
| memory_type | string | no | — |
Mark this Claude Code session as running a named flow, e.g. "challenger" (a second model challenges your plan and every commit; Tares keeps the whole exchange and writes the session summary). Pass an empty string to clear it. Call it when the user asks for the flow at the start of a session. This…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| flow | string | no | — |
List the connector types you can create a source with, each with its config fields, mode (poll | push), and whether it supports discovery. Read this first to learn what you can ingest and how to configure it.
Takes no parameters.
Introspect an upstream and get a proposed source config — no commitment. Works for connectors that can introspect: e.g. prometheus given {"url": "http://..."}, or github given {"repo": "owner/name"}. The returned proposed_config can be passed straight to create_source.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| connector | string | yes | — |
| config | object | yes | — |
Scan the local Docker environment and get a list of proposed sources (one per container's logs, plus a detected Prometheus). Each item's config is ready to pass to create_source.
Takes no parameters.
Dry-run a source config without creating it: poll connectors do one live poll and return a sample; push connectors return their ingest endpoint. Use before create_source to check the config works.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| connector | string | yes | — |
| config | object | yes | — |
| poll | string | no | — |
Create a data source so Tares starts ingesting it immediately (no restart). config is the connector's config (see list_connectors / discover_source); push connectors ignore poll.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| connector | string | yes | — |
| config | object | yes | — |
| poll | string | no | — |
| project | string | no | — |
List every configured source with its live health (status, events ingested, last error).
Takes no parameters.
Profile a source's real fields from recent events: every candidate field with its coverage, distinct count, and top values, plus which are already declared as labels/keys. Call this BEFORE choosing labels for a source — a label's field MUST be one of these exact field names (never invent one).…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| limit | integer | no | — |
List the projects you can work in: id, name, template and status. With a project key it is the one project the key belongs to.
Takes no parameters.
Join a project: Tares POSTs every firing of every trigger in the project to url (your agent's webhook), the triggers added later included. The body carries dispatch_id, trigger, project, key (the entity), fired_at, payload (the timeline) and run_ids (the Tares agents it woke). Returns the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | — |
| project | string | no | — |
Counts per value of the label by over the project's sources, the last window against the window before, largest change first. where {label: value} narrows the events counted, sources narrows the sources. Use it to see what moved before reading one entity.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| by | string | yes | — |
| window | string | no | — |
| where | object | no | — |
| top | integer | no | — |
| sources | array | no | — |
| project | string | no | — |
List the project's skills: name and description. Load one with get_skill before relying on it, only when your task matches its description.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | — |
The instructions of one of the project's skills, as markdown.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| project | string | no | — |
The findings recorded in the project, newest first: its Tares agents' and the ones external agents recorded. entity and agent narrow them. Read them before concluding, so you build on what is known instead of repeating it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | string | no | — |
| agent | string | no | — |
| limit | integer | no | — |
| project | string | no | — |
Record what you concluded about an entity (a service, a repo, a customer) in the project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | string | yes | — |
| finding | string | yes | — |
| verdict | string | no | — |
| label | string | no | — |
| project | string | no | — |
| headline | string | no | — |
| next_step | string | no | — |
What happened in the project, newest first: each firing with the runs it woke and their findings, and the findings recorded without a firing (external agents' among them).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | — |
| project | string | no | — |
Create an empty Tares project for a piece of work you are about to spec, and tie this session to it. name is the project's handle (unique on Tares); goal is one line saying what it is for. Then write its docs with write_doc and its tickets (write_ticket, or link_linear_project or…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| goal | string | no | — |
Write a markdown doc into the project, or replace one when id is given. kind is one
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | yes | — |
| title | string | yes | — |
| body | string | yes | — |
| id | string | no | — |
| project | string | no | — |
The project's docs in reading order (starting prompt, spec, plan, AGENTS.md, memory, notes, working docs): id, kind, title, size, when changed. No bodies: read one with get_doc.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | no | — |
| project | string | no | — |
One of the project's docs, with its markdown body.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
| project | string | no | — |
The docs every project shares: the AGENTS.md for all projects (the user's standing rules) and the memory (facts and preferences that hold across projects), as markdown. Read them at the start of any work on a project and follow them; do not ask the user again for what they already say.
Takes no parameters.
Add one line to a doc every project shares: doc is agents (the AGENTS.md for all
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc | string | yes | — |
| line | string | yes | — |
Pick the build up where an earlier session stopped. Call it first when you are told to work on a project and a ticket is already in progress (list_tickets says so), or when told to pick up. Returns the hand-over: the ticket with its working doc, what the previous session said last and the files it…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | — |
| take_over | boolean | no | — |
The project's tickets in plan order: id, label (the Linear identifier such as ENG-12, the GitHub identifier such as GH-12, else T<n>), title, status (todo, in_progress, done, canceled), milestone, depends_on, the GitHub repo it changes (repo, owner/name, for a project that spans several),…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | — |
One ticket, by its Tares id, its number (T3), its Linear identifier (for example ENG-12) or its GitHub identifier (for example GH-12), with the body of its working doc, who holds it and where it stands, its pull request as GitHub has it (head, CI, the reviewer's verdict, merged), its history, and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticket | string | yes | — |
| project | string | no | — |
Add a ticket to the project's list, or change one when id is given (its id or T<n>).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | — |
| status | string | no | — |
| position | number | no | — |
| milestone | string | no | — |
| depends_on | array | no | — |
| id | string | no | — |
| project | string | no | — |
| repo | string | no | — |
Link a working doc (write it first with write_doc, kind working) to a ticket, by the ticket's Tares id, Linear identifier or GitHub identifier (GH-12). Works for tickets in Linear or GitHub too: the working doc stays in Tares.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticket | string | yes | — |
| doc | string | yes | — |
| project | string | no | — |
Tie the project to the Linear project its tickets live in, by the Linear project's id, URL or name. Tares then keeps its ticket list in sync with Linear (about once a minute) and runs a first sync now. Needs Linear connected on Tares (Settings). Returns the tickets found.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| linear_project | string | yes | — |
| project | string | no | — |
Tie the project to the GitHub repo (owner/name or URL) whose issues carrying issue_label are its tickets (default tares:<project name>). Tares then keeps its ticket list in sync (about once a minute): the GitHub milestones its issues sit in become the project's milestones, "blocked by" becomes…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| repo | string | yes | — |
| issue_label | string | no | — |
| project | string | no | — |
The project's milestones in order: name, goal, acceptance checks, how many tickets and how many are done, which are ready, and whether the milestone is finished. Work one milestone at a time, in this order.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | — |
The project's assumptions, A1 first: the question, the choice, why, the tickets, and the state (open: not yet confirmed; kept; overturned, with the person's words). state narrows the list.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | — |
| project | string | no | — |
The pull requests waiting for review across every project, in the order to take them:
Takes no parameters.
Start every review here: the pull request as GitHub has it (it says STOP when the PR is merged or its head moved past head), the ticket and its working doc, the builder's checks compared with its recorded session (unmatched first: check those yourself), Codex's findings and the waivers to judge,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticket | string | yes | — |
| head | string | no | — |
| project | string | no | — |
Start every ticket here, and again after a revive: one read with where the ticket stands (stage, holder, PR, verdict), its working doc, its milestone and acceptance checks, the state of what it depends on, the project's AGENTS.md (it wins over the generic flow) and the shared one, open assumptions…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ticket | string | yes | — |
| start | boolean | no | — |
| project | string | no | — |
Write the map of a GitHub repo (owner/name) that the builder and reviewer briefs serve:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| repo | string | yes | — |
| body | string | yes | — |
| note | string | yes | — |
| base | string | no | — |
| project | string | no | — |
Kinds of finding that came back in several tickets of a repo (owner/name) in the last 30 days, with the tickets and examples. Check these first in a review.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| repo | string | yes | — |
The desk: open questions (or answered, withdrawn) across every project, blockers first, then oldest. Ask the first one.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | — |
| project | string | no | — |
What the person decided on the project, newest first: the question, their words, the choice, whether it stands from now on and whether it matched what they typed (via "console": a permission they allowed in the console; the watch restarts that station with it). Follow them; relay them to…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | — |
The tares-factory crew's settings for every project: autonomy (L3-review: the person approves each merge; L4-ship: a builder merges after the reviewer's pass and green CI), releaser (whether the crew runs a releaser; without one a ticket ends at merged), release_profile, prod_pattern (what…
Takes no parameters.
What the person allows the crew to do, in their own words with the date: the grants for every project, and the project's own when project is given. Never act on a permission that is not here or in the person's own words in your session.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | string | no | — |
The crew as Tares sees it: one row per station (orchestrator, reviewer, releaser, builders, helpers) with its state (working, idle, waiting, quiet, ended), the project it is on, when it last spoke, the stations it started, and how many earlier sessions played it.
Takes no parameters.
One station with its current session and the earlier sessions that played it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
The projects handed to the crew, oldest first: each with its repos (path on this machine, GitHub name) and the tickets and open PRs of each, the autonomy it was handed over at when stricter than the crew's, tickets done of all, and the milestone it is on. The orchestrator works from this list:…
Takes no parameters.
Propose the whole project plan. Call it once, with everything.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| goal | string | yes | the person's goal, one line, at most 200 characters, in their words |
| name | string | yes | the project name, two to four words |
| summary | string | yes | one or two plain sentences: what wakes the project and who looks |
| watches | array | yes | the sources: new ones, or existing ones reused |
| wakes | array | yes | the triggers, usually one |
| who | string | yes | — |
| agents | array | yes | Tares agents (who tares), at most 3 |
| own_agent | object/null | no | who own: the person's agent |
| tools | array | yes | outside MCP servers for the Tares agents, off |
| skills | array | yes | know-how, at most 2 |
| notes | array | yes | plain caveats, may be empty |
List all sources, triggers and projects (handles) in the catalog.
No parameter schema on file.
Describe one catalog entry in full: schema (event types + inferred typed
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | yes | e.g. source:logs, trigger:error_spike |
The (label, value) entities across sources, faceted. Optionally pass a single
| Parameter | Type | Required | Notes |
|---|---|---|---|
| label | string | no | optional: one label axis |
Recent events for a source (key, type, text, time); the actual data.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| limit | integer | no | — |
The project templates installed here: key, title, what each sets up, its
No parameter schema on file.
Ask a template to look at the environment (running containers, reachable
| Parameter | Type | Required | Notes |
|---|---|---|---|
| key | string | yes | the template key from list_templates |
Propose the labels (and primary key) for ONE source, as a card the user will
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source | string | yes | — |
| labels | array | yes | — |
| reasoning | string | yes | — |
Propose a trigger: a condition Tares evaluates continuously over one or more
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| sources | array | yes | — |
| key_field | string | no | — |
| filters | array | no | Optional. Restricts which events the trigger counts and hands over. Each entry is an object with exactly field, op and value. |
| condition | object | yes | — |
| emit | object | no | — |
| cooldown | string | no | minimum gap between firings per entity, e.g. 5m |
| reasoning | string | yes | — |
Propose ONE source to connect, as a prefilled connector form the user will
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | a short, lowercase source name |
| connector | string | yes | a connector name from list_connectors |
| poll | string | no | poll interval, e.g. 30s; omit for the default |
| config | object | no | non-secret field values only, keyed by the connector's field names; a field in needs must not appear here |
| needs | array | yes | connector field names the user must supply themselves: every secret, plus anything you would otherwise have to guess |
| reasoning | string | yes | — |
Propose a whole project from an installed template, as its prefilled form
| Parameter | Type | Required | Notes |
|---|---|---|---|
| template | string | yes | the template key from list_templates |
| name | string | yes | a short project name |
| goal | string | no | what the project is for, one plain line of at most 200 characters, in the user's words where you can |
| params | object | no | parameter values, keyed by parameter name |
| needs | array | yes | parameter names the user must fill themselves |
| reasoning | string | yes | — |
Propose the Tares agent that runs when the trigger fires, as a prefilled
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| trigger | string | yes | — |
| prompt | string | yes | — |
| model | string | no | omit to follow the instance default |
| max_rounds | integer | no | — |
| budget_usd | number | no | — |
| delivery | object | yes | — |
| handoffs | array | no | when this agent concludes with a verdict, run another agent of the project on the same entity. The target must already exist or have been applied earlier in this build. |
| runs_on_trigger | boolean | no | false for an agent that should run only when another agent hands off to it; it still names a trigger but is left off for it. Default true. |
| reasoning | string | yes | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- 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 Tares 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 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
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.
Tools were statically extracted from the published source (50 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
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 |
|---|---|---|
| list_milestones | no tags | |
| list_assumptions | no tags | |
| review_queue | no tags | |
| review_brief | no tags | |
| builder_brief | no tags | |
| write_repo_map | no tags | |
| recurring_findings | no tags | |
| desk_list | no tags | |
| list_decisions | no tags | |
| get_crew_settings | no tags | |
| read_grants | no tags | |
| list_crew | no tags | |
| get_station | no tags | |
| crew_projects | external-sink | external-sink: keyword "open_pr" |
| read | no tags | |
| catalog_list | no tags | |
| catalog_describe | no tags | |
| set_session_flow | no tags | |
| list_connectors | no tags | |
| list_sources | no tags | |
| source_fields | no tags | |
| list_projects | no tags | |
| join_project | no tags | |
| stats | no tags | |
| list_skills | no tags | |
| get_skill | no tags | |
| list_findings | no tags | |
| record_finding | no tags | |
| project_timeline | no tags | |
| list_docs | no tags | |
| get_doc | no tags | |
| read_global_docs | no tags | |
| list_tickets | no tags | |
| get_ticket | no tags | |
| create_trigger | no tags | |
| update_trigger | no tags | |
| subscribe | external-sink | external-sink: keyword "webhook" |
| remember | no tags | |
| discover_source | no tags | |
| discover_docker | no tags | |
| test_source | no tags | |
| create_source | no tags | |
| create_project | no tags | |
| write_doc | no tags | |
| add_to_global | no tags | |
| pick_up | no tags | |
| write_ticket | no tags | |
| attach_working_doc | no tags | |
| link_linear_project | no tags | |
| link_github_issues | 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.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
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
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 1.55.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
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 Tares 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.