Skip to content
Agentmart
Submit a tool

agent4.io

Build and run grounded business agents over MCP: agents, knowledge bases, skills, Storylines.

Connector by agent4.ioOfficial · Domain verified by the MCP Registry

IndexedLicense unknownRemote (HTTP)
Write a review

Install

Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install connector/agent4-io-agent4-tenant

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://api.agent4.io/v1/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Build and run grounded business agents over MCP: agents, knowledge bases, skills, Storylines.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
24 read · 23 write · 0 delete · 3 not yet classified
Secrets
1 (API keys, tokens or passwords)
Install scripts
Nothing to install (hosted)
Runs as
Hosted (remote endpoint)

Tools by what they do 50

From the running server's own tool list (tools/list) on Oct 25, 2026.

Read 24 · Look things up without changing anything.

  • diagnose_prompt
  • get_agent
  • get_end_user
  • get_knowledge_base
  • get_knowledge_index
  • get_skill
  • get_storyline
  • list_agents
  • list_end_users
  • list_knowledge_bases
  • list_mcp_servers
  • list_page_contexts
Show 12 more tools
  • list_shares
  • list_skills
  • list_storylines
  • list_tools
  • list_user_sessions
  • page_context_stats
  • preview_plan
  • search_agent4_docs
  • search_knowledge_base
  • tenant_info
  • usage_stats
  • validate_storyline

Write 23 · Create, change, send or run things.

  • add_knowledge_file
  • add_knowledge_text
  • build_knowledge_index
  • clone_storyline
  • configure_share
  • create_agent
  • create_knowledge_base
  • create_share
  • create_skill
  • create_storyline
  • import_storyline
  • patch_knowledge_index
Show 11 more tools
  • publish_storyline
  • resolve_page_context
  • set_custom_domain
  • set_pwa_branding
  • test_planner_trigger
  • test_skill_trigger
  • update_agent
  • update_knowledge_base
  • update_skill
  • update_storyline
  • upsert_page_context

Not yet classified 3 · We could not tell from the name and description.

  • export_storyline
  • improve_prompt
  • unpublish_storyline

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • X-API-Key

Network hosts it talks to 1

  • api.agent4.io · found in remote endpoint, install command

Files it touches

  • Any path the agent passes to its tools

Tools (50)

As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_knowledge_file

    Add a local file's content to a knowledge base (txt/md/html/pdf/docx). **This MCP runs on the platform server and cannot read paths on YOUR machine.** For text files, read the content yourself and call `add_knowledge_text`; for binaries (pdf/docx), upload via the console, or curl `/knowledge-bases/{name}/documents/upload`. **To ingest a whole folder, zip it and send that one endpoint** — subdirectories are walked, md/txt/pdf/html/docx are ingested one by one, and document names use the in-archive relative path (`2025/rates.pdf` vs `2026/rates.pdf` therefore never coll…

  • add_knowledge_text

    Add a **text** document to a knowledge base (chunking + embedding happen synchronously; returns the real chunk count). For **local files** (pdf/docx…) see `add_knowledge_file`.

  • build_knowledge_index

    Build (or rebuild) the structured index for a knowledge base — the second leg beside vector search. Vector search answers "what does this passage say". It **cannot count, filter numerically or aggregate**, so "how many documents", "which ones are between 1000 and 2000 words", "how many per category" are not answered badly — they are structurally unanswerable. This builds a small per-KB table from whatever structured header the documents share, which the agent can then query with SQL via `query_knowledge_table`. Only worth it when the documents share a machine-readable…

  • clone_storyline

    Clone a storyline into a new draft (new key, unpublished, doesn't claim default, no chain pointer) for tweaking.

  • configure_share

    Configure this share — its name and its **appearance** — fields you don't pass stay as they are (server-side partial merge). - `label`: the name at the top of the chat page, and the browser tab's title. **Renaming a share is this call**; you never need to create a replacement and delete the old one. That would mint a new token, so the link already embedded in the client's site would stop working — the visible name and the address are not the same thing. - `theme_color`: the brand colour, `#RGB` or `#RRGGBB`. **This one colour is all you give** — its foregro…

  • create_agent

    Create an agent. `name` is lower-cased on save — it is a key, not a display name. soul = persona/identity; task = duties and boundaries; tools = tool-name whitelist (check list_tools first; the system tools time/geo/weather **and `compute_chart`** are **auto-enabled by default**, no need to list them — but note that passing `tools` at all replaces that default list, so include them yourself if you pass any); knowledge_bases = attached knowledge base names (once attached, retrieval is injected automatically every turn). `ask_forms` (**on by default**) lets the…

  • create_knowledge_base

    Create a knowledge base. **Write `description` — it is what routes questions to this base.** Before each answer the platform reads every attached base's `description` and decides which ones this question needs; a base whose description is vague or blank gets searched when it should not, or missed when it should. One line, in the words a visitor would use, naming the subject **and the boundary**: "Country-by-country medical device registration requirements — not company or pricing information." It is also the line shown in the console list, but that is the lesser job. …

  • create_share

    Create a **share / integration entry point** for an agent — this is how end users actually reach it. **`published=True` only means "visible", not "reachable"**: for end users to talk to the agent you must create a share. The response carries a directly openable chat link (`{public_base}/s/<token>`) and the website embed URL (`{public_base}/embed/<token>`). For a website widget, paste one line before </body>: `<script src="{public_base}/embed.js" data-token="<token>"></script>`. label names this entry point ("website widget", "support link"). Telegram/WhatsApp and other…

  • create_skill

    Create a skill. description = "when to use" (goes into the system prompt, keep it short); instructions = the detailed guide (fetched on demand via load_skill). The paradigm (important): instructions are visible only AFTER the model calls load_skill — if calling some tool is **mandatory** ("user gives a phone number → must call save_contact"), the trigger must be written into description, otherwise models often answer directly without loading the skill and the rule never takes effect. Also never promise return values a tool doesn't produce (ticket numbers / IDs) — the m…

  • create_storyline

    Create a storyline draft. After creating, self-check with validate_storyline, then publish_storyline. user_visibility — what the end user sees of their own run: "invisible" (default, no UI), "named" (a banner with the storyline name only), "trail" (banner + read-only view where untaken branches and future steps are redacted grey blocks), "full" (banner with step x/y + full read-only map). `learner_visibility` is the deprecated old name (legacy values hidden/completed_only still accepted and mapped). concurrency — who the progress follows: "user" (default) = progre…

  • diagnose_prompt

    Read a field and return a list of **specific** improvement suggestions (string array). field: same values as improve_prompt. current = the text to diagnose (required — an empty text has nothing to diagnose). Typical flow: diagnose_prompt first, pick the suggestions you want, then fold them into improve_prompt's hint.

  • export_storyline

    Export a portable storyline JSON (schema_version + definition; no tenant/version/id) for backup, migration or re-import.

  • get_agent

    Get one agent's full configuration (soul/task/tools/skills/knowledge_bases/model/params).

  • get_end_user

    Get one end user's detail: basic profile (name, contact email/phone, city, timezone) + their spaces. Never any conversation content. Carries a `console_url` to the user's detail page.

  • get_knowledge_base

    Get one knowledge base's configuration (including the full instructions text shown to the model).

Show 35 more tools
  • get_knowledge_index

    Show the structured index profile: per column coverage, type, numeric range, top values, warnings. **The warnings are the point.** On a real 4,500-document catalogue this surfaced three data problems nobody knew about: 1,058 documents with `page_count` 0, 505 with `reading_level` 0, 493 with `word_count` 0 — those are not zeros, they are missing values recorded as 0, and they silently poison every average, minimum and range filter built on them. Report the warnings to the user in their own terms ("493 of your books have no word count — they will all tie for shortest")…

  • get_skill

    Get one skill's full content (including the complete instructions text).

  • get_storyline

    Get one storyline's full definition (whole graph + profile_schema + top-level fields).

  • import_storyline

    Import an exported storyline JSON as a draft. **Artifacts like "generate a storyline from a novel / source material" land here.** payload = the structure returned by export_storyline (schema_version + graph + profile_schema + top-level fields). Version-aware: payloads newer than the system supports are rejected. Always creates new, never claims default, key collisions auto-rename. override_agent_name rebinds the imported line to an agent that exists in the target tenant.

  • improve_prompt

    Rewrite a field's text to work better as an AI system prompt; returns the improved text. field ∈ persona | task | greeting | storyline_task | storyline_opening | storyline_ai_trigger | storyline_ai_criteria | skill_description | skill_instructions | kb_description | kb_instructions — determines the rewrite target (a Task should read like commands, a KB description says "what's inside / when it's relevant", a skill description says "when to use" in one line, …). current = the current text (empty = draft from scratch); hint = the direction you want this …

  • list_agents

    List all agents in this tenant (name + published state).

  • list_end_users

    List this tenant's **end users** (the people chatting with your agents) — roster only, never any conversation content. Each user carries: display name, login method (email / oauth:* / proxy), email (if any), space/session/document counts, last-24h token usage, and a `console_url` (click through for detail). q filters by name or external id; sort ∈ recent (default) | tokens24h (descending 24h usage). Pagination: pass the returned next_cursor back as cursor. Typical: list_end_users(sort="tokens24h") to find the most active / most expensive users.

  • list_knowledge_bases

    List this tenant's knowledge bases (with doc/chunk counts and relevance cutoff).

  • list_mcp_servers

    List the MCP servers connected in this tenant's tool library (read-only; secret fields omitted).

  • list_page_contexts

    List all page playbooks of this tenant (with match rules, greeting mode, position).

  • list_shares

    List an agent's shares (token / label / disabled / chat link / embed URL / appearance config). When the top-level `pretty_url` is non-empty it is the preferred link to give humans (see create_share).

  • list_skills

    List this tenant's skills.

  • list_storylines

    List this tenant's storylines (optionally filtered by agent). Includes state, version, default flag.

  • list_tools

    List tool names assignable to agents, with their descriptions (incl. the tenant's connected MCP tools).

  • list_user_sessions

    List one end user's **sessions** — metadata only: agent, title (AI summary), message count, tokens, timestamps. **Message bodies are not returned.** Transcripts are rendered in the console: each session carries a `console_url` that **deep-links straight to that conversation, auto-opened** (no digging through the detail page when there are many), plus `user_console_url` to the user's detail page as the general entry. Hand the link to the tenant — a human reads the original there. Pagination: pass next_cursor back as cursor.

  • page_context_stats

    Open counts and suggested-question click counts per playbook — find copy nobody clicks.

  • patch_knowledge_index

    Change the structured index schema from one sentence of plain language. Example requests: "also track the author so users can find other books by them", "I want to filter by illustrator", "drop the cover link". The model may only emit add/modify/remove/refused — it cannot rewrite the table, so it has no way to damage columns the user did not mention. **Data that is not in the documents comes back in `refused`, not as a new column.** Asked for a publication year that the corpus does not carry, it says so instead of inventing an empty column. Pass that refusal on to the…

  • preview_plan

    Generate a plan for a goal and return it for review **without persisting anything** — no temporary storyline, no enrollment, no user affected. Use it to inspect plan quality before trusting the feature in production, or to see how the agent's `task` constrains the steps. Returns {plan, backend, warnings}. `warnings` flags machine-detectable smells, notably checklist items that are the AGENT's own deliverable ("produce a summary") — those can never be ticked off, because ticking is judged from what the USER provides, so the step would stall forever.

  • publish_storyline

    Publish a storyline: validates first (blocking errors → 422), then freezes an immutable version and marks it published.

  • resolve_page_context

    Given a URL (or key), show which playbook it resolves to — always verify after writing a match rule. Globs make it easy to write rules that "look right but never match" (one `*` short, one path level too many) — and in production the only symptom is visitors silently getting the default playbook, with no error anywhere.

  • search_agent4_docs

    Search agent4.io's own product docs — concepts (what a thing *is*) and cookbook recipes (which tool to *call*). Use when you're unsure how an agent4.io feature works, what a term means, or how to build something on the platform. Returns top passages with title, layer ("concept"|"ops"), url and a snippet. Public content; no tenant data involved.

  • search_knowledge_base

    Search this knowledge base; returns matching chunks with distances. Uses **exactly the same retrieval path as real conversations** — use it to validate the cutoff and chunking: an empty result means this question will be judged "not covered" and the agent will answer "not in the knowledge base".

  • set_custom_domain

    Bind the client's own domain to this tenant's chat pages: `https://chat.client.com/` serves the tenant's branded page (or a specific agent's chat), the address bar keeps the client's domain, and the TLS certificate is issued automatically. **Have the client configure DNS first**: add a CNAME at their DNS provider pointing to the `cname_target` in the response (`endpoint.agent4.io`). Key points: - **Subdomains only** (`chat.client.com`). An apex domain (`client.com`) cannot carry a CNAME — have the client use a subdomain, or a DNS provider with CNAME flattening (Cloud…

  • set_pwa_branding

    Configure a specific **agent's** PWA branding and install experience (applies to that agent's `/s/` standalone chat pages — what gets installed to the home screen is one agent's entry page, so each agent is its own app). - `agent`: the agent name whose install branding to configure (required). - `icon_source_url`: public URL of one master image (PNG/JPG/WebP ≥192×192, ideally a square logo). The server derives the full set: browser-tab favicon(48) + install icons 192/512 + Android maskable(512). Non-square images are centre-cropped. Once set, "Add to Home Screen" …

  • tenant_info

    This tenant's basic info and quota (plus custom-domain binding status, if any).

  • test_planner_trigger

    Dry-run the Dynamic Planner's escalation judge: would these messages be offered a step-by-step plan? Use it after editing the agent's `task`, since the task text is the **business-domain gate** — a vague task lets out-of-domain requests through, a narrow one turns real customers away. messages: the user's turns in order; the LAST one is treated as the current turn and the rest as that user's earlier messages (same window the live judge sees). samples>1 re-runs the judge to show stability (it is a probabilistic call). expect: pass true/false to get `matched`. Nothin…

  • test_skill_trigger

    Reality-check whether your prompts actually trigger tool calls (dry-run) — run this after writing/changing a skill instead of counting corpses in production. Replays your messages N times against the **production** system-prompt assembly, tool schemas and this tenant's actual model routing, capturing only the model's tool-call decision: **tool side effects are NOT executed**, no session is stored. Tokens count toward the tenant quota (messages≤5, samples≤5, at most 25 calls per invocation — pick test messages carefully). Two modes for the skill's two battlefields: …

  • unpublish_storyline

    Unpublish (archive): no more auto-enrolment; in-flight users silently degrade to the plain agent on their next turn (progress kept — re-publishing resumes it).

  • update_agent

    Update **part** of an agent — fields you don't pass stay as they are. ⚠️ List-field semantics, don't mix them up: `tools=[...]` / `skills=[...]` / `knowledge_bases=[...]` are **full-list replacement** — items you didn't read first get pushed out. To "add one / remove one", use `add_tools` / `remove_tools` (and add_/remove_skills, add_/remove_knowledge_bases): incremental, idempotent, leaves the rest untouched. After the call, **read the response** to verify the final list — don't announce "enabled" just because the call succeeded. Also: tools can ride on a skill (…

  • update_knowledge_base

    Update part of a knowledge base — fields you don't pass stay as they are (server-side PATCH merge).

  • update_skill

    Update part of a skill — fields you don't pass stay as they are (server-side PATCH merge, no GET+PUT round-trip). ⚠️ `tools=[...]` is **full-list replacement**; to add/remove one use `add_tools`/`remove_tools` (incremental, idempotent). Tools bound to a skill take effect automatically at chat time on any agent the skill is attached to — no need to also add them to the agent's tools.

  • update_storyline

    Update **part** of a storyline draft — fields you don't pass stay as they are (GET-then-merge on top of a full PUT underneath). concurrency: "user" = progress belongs to the person (shared across sessions); "session" = progress belongs to the case (one run per session). Changes affect only **future** enrolments; in-flight runs are not migrated. ⚠️ Especially `graph`: not passing it = keep the existing graph. (This tool once treated "no graph" as replace-with-empty — renaming a storyline wiped its whole flow. Semantics are now partial; to truly clear the graph, pas…

  • upsert_page_context

    Create or fully replace a page playbook. `context` is the page background the **server** injects for the agent — write "who lands on this page, what they are deciding, what they usually worry about"; do NOT write facts like prices or quotas (those belong in a knowledge base, which also ranks higher in authority). `url_pattern` is a glob (`*/pricing`, `*/solutions/*`), matches the path only, ignores query strings and trailing slashes; without it the page must report the key explicitly. Resolution order: explicit key > url_pattern > default. `greeting_mode="generate…

  • usage_stats

    Usage statistics. group ∈ total | agent | user | space | day | model. Metadata only — token counts and event counts, never any conversation content. Use group="user" to see who uses the most, group="agent" for the busiest agent.

  • validate_storyline

    Validate the storyline graph (entry / dead ends / unreachable / dangling / cross-line targets / rule dimensions). Returns {ok, errors}. Must pass before publishing.

Signals

Last release
Jul 30, 2026 (3 months ago)

Details

Registry name
io.agent4/agent4-tenant
Version
1.4.0
Auth
API key
License
License unknown
Website
agent4.io
First seen
Oct 24, 2026
Last checked
Oct 25, 2026
Cite this page

agent4.io MCP server. Agent Mart. https://agentmart.dev/connectors/agent4-io-agent4-tenant (last updated 2026-10-25)