AIOProductOS MCP
REMOTE · PLATFORM.AIOPRODUCTOS.COM · 2 COMPONENTS · SCANNED AUG 3
AIOProductOS: revenue, feedback, work and analytics on one customer record. 71 tools, 3 apps.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability90
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 10303 tokens (~139/item across 74 items; 71 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
- Tools include usage examples.Pass
Stability & Change Management26
- Stability check failed: schema churn in the 8 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · platform.aioproductos.com
claude mcp add --transport http com-aioproductos-mcp https://platform.aioproductos.com/api/mcp
[mcp_servers.com-aioproductos-mcp] url = "https://platform.aioproductos.com/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-aioproductos-mcp": {
"type": "remote",
"url": "https://platform.aioproductos.com/api/mcp",
"enabled": true
}
}
} openclaw mcp add com-aioproductos-mcp --url https://platform.aioproductos.com/api/mcp --transport streamable-http
mcp_servers:
com-aioproductos-mcp:
url: "https://platform.aioproductos.com/api/mcp" {
"mcpServers": {
"com-aioproductos-mcp": {
"type": "http",
"url": "https://platform.aioproductos.com/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 22 to 26.
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 19 to 22.
- 1 Aug 26 +4
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 31 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
- Stability: 0.10 → fail ▼ security
- 29 Jul 26 +2
- The server now declares the “resources” capability functional
- First check of Schema quality: 100 functional
- First check of Capabilities: pass functional
- New resource “Board” functional
- New resource “Weekly Signal Memo” functional
- New resource “Revenue-Weighted Funnel” functional
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 0
- Stability: unverified → 0.03 ▲ functional
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://platform.aioproductos.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=platform.aioproductos.com | CN=YR1,O=Let's Encrypt,C=US | 7 Jun 2026 | 5 Sept 2026 | RSA 2048 | SHA256-RSA | 5919ec95913b51dda57cbcd94912e247d76 |
| SANs: platform.aioproductos.com | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
DNSSEC insecure
Validation of platform.aioproductos.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| aioproductos.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="AIOProductOS MCP", resource_metadata="https://platform.aioproductos.com/.well-known/oauth-protected-resource"
Bearer realm="AIOProductOS MCP", resource_metadata="https://platform.aioproductos.com/.well-known/oauth-protected-resource" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | geolocation=(), browsing-topics=() |
Protected resource metadata
| Document | https://platform.aioproductos.com/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://platform.aioproductos.com/api/mcp |
| Authorisation server | https://platform.aioproductos.com |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://platform.aioproductos.com/api/mcp | Verified | 200 | |
| http (plaintext) | http://platform.aioproductos.com/api/mcp | HTTPS enforced | 308 | https://platform.aioproductos.com/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
read_channel Read Comms Channel ~85
Read a Comms channel's recent messages, newest included (the connected member must be a channel member). Read-only; returns the messages, empty when the channel is silent. Resolve channel_id first with list_channels — never guess it. Optional limit.
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | Channel id, from list_channels. |
| limit | number | — | Max messages to return (optional). |
No output schema declared.
{"channel_id":"chan_eng","limit":50} reply_in_channel Reply in Channel Thread ~124
Reply in a thread under a specific message in a Comms channel you belong to, as the connected member, and return the posted reply — org-visible to the channel. Resolve channel_id via list_channels and the parent message's id via read_channel. channel_id, parent_id, and body are all required.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Reply text, visible to all channel members (required). |
| channel_id | string | yes | Channel id, from list_channels (required). |
| parent_id | string | yes | Parent message id to thread under, from read_channel (required). |
No output schema declared.
{"channel_id":"chan_123","parent_id":"msg_9","body":"On it — PR up in an hour."} reply_to_conversation Reply to Support Conversation ~125
Send a public reply to a support-inbox conversation, as the connected member, and return the result — it goes to the end-user on the conversation's channel. A write. Resolve conversation_id via list_conversations; read the thread with get_conversation before replying. conversation_id and body are required. For an internal-only note use add_note; to close it use resolve_conversation.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Public reply text sent to the end-user (required). |
| conversation_id | string | yes | Conversation id to reply to, from list_conversations (required). |
No output schema declared.
{"conversation_id":"conv_42","body":"Thanks for flagging — the export bug is fixed and live."} reschedule_booking Reschedule Booking ~109
Reschedule a booking to a new start time (ISO 8601) and return the result — the invitee is notified. A write. Resolve booking_id via list_bookings first. booking_id and start are required.
| Name | Type | Req | Description |
|---|---|---|---|
| booking_id | string | yes | Booking id to move, from list_bookings (required). |
| start | string | yes | New start time, ISO 8601 (e.g. 2026-07-20T15:00:00Z) (required). |
No output schema declared.
{"booking_id":"book_7","start":"2026-07-20T15:00:00Z"} resolve_conversation Resolve Conversation ~81
Mark a support-inbox conversation resolved (closed) and return the result. A write; idempotent — resolving an already-resolved conversation is a no-op. Resolve conversation_id via list_conversations first. Do it after you've replied and the ask is handled.
| Name | Type | Req | Description |
|---|---|---|---|
| conversation_id | string | yes | Conversation id to resolve, from list_conversations (required). |
No output schema declared.
{"conversation_id":"conv_42"} revert_to_version Revert Artifact Version ~134
Restore an earlier artifact version (F5) to current and return the now-current version: the existing current version is flipped to 'reverted' (kept for the learning signal) and the chosen version becomes current again. A write — not idempotent, since re-running reverts again. version_id is the version you want to RESTORE; get it from list_artifact_versions and never guess it. Optional reason is recorded.
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | — | Why you're reverting (optional, recorded). |
| version_id | string | yes | Id of the version to restore (make current), from list_artifact_versions. |
No output schema declared.
{"version_id":"ver_8f3a","reason":"new review missed the metric finding"} review_artifact PRD Review ~255
Agent-as-critic over a DRAFT artifact (a feature spec, experiment plan, or page): checks it against a baseline PM bar — clear problem/hypothesis, a measurable success metric, evidence cited, risks named, a rollout/experiment plan — and returns structured findings (section, severity, a CONCRETE suggested fix, and a verbatim evidence quote) plus a 0-100 score. A write: each call re-runs the review and persists it as a new version (see list_artifact_versions). Resolve target_id first — via pm_meta or list_features for a feature, list_experiments for an experiment, list_pages for a page. One small LLM call; use it before sending a draft for sign-off.
| Name | Type | Req | Description |
|---|---|---|---|
| rubric_id | string | — | Score against a specific rubric; omit to use the org's default rubric (or the built-in baseline). |
| target_id | string | yes | Id of the feature/experiment/page to review — from pm_meta, list_features, list_experiments, or list_pages. |
| target_type | string | yes | What kind of artifact target_id is: a feature (spec), an experiment (plan), or a page (doc/PRD). |
No output schema declared.
{"target_type":"feature","target_id":"feat_8f3a"} unmerge_end_users Undo End-User Merge ~135
Undo a previous end-user merge: reads the merge ledger and re-points every FK row (events, insights, tasks, …) back to its original end-user, un-tombstoning the folded-in sources. Safe to retry — a second undo of the same merge changes nothing (it fails with already_reverted). Use to correct a wrong identity merge (merges stay reversible for 30 days). Find the event_id with list_identity_merges (pick an un-reverted merge); event_id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| event_id | string | yes | Id of the merge event to undo, from list_identity_merges. |
No output schema declared.
{"event_id":"uuid"} update_decision Update Decision ~150
Update a decision and return it; omitted fields unchanged. Moving status to 'decided' re-stamps the decision time. Re-link via link_type + link_id (verified in-org), or clear with nulls. Resolve the id via list_decisions; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Decision id, from list_decisions (required). |
| link_id | string | — | New linked id, or null to unlink (optional). |
| link_type | string | — | New link target (optional). |
| rationale | string | — | New rationale; null clears it (optional). |
| status | string | — | New status (optional). |
| title | string | — | New title (optional). |
No output schema declared.
{"id":"dec_123","status":"revisit"} update_experiment Update Experiment ~199
Update a PM experiment — advance its state and record the outcome — and return it. state ∈ hypothesis|build|measure|learn; verdict ∈ validated|invalidated; decision ∈ pivot|persevere. Resolve the id via list_experiments; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| decision | string | — | What you'll do next (optional). |
| hypothesis | string | — | New hypothesis; null clears it (optional). |
| id | string | yes | Experiment id, from list_experiments (required). |
| metric | string | — | New metric; null clears it (optional). |
| result | string | — | Free-text result / what you learned; null clears it (optional). |
| state | string | — | Build-Measure-Learn stage (optional). |
| target | string | — | New target; null clears it (optional). |
| title | string | — | New title (optional). |
| verdict | string | — | Outcome (optional). |
No output schema declared.
{"id":"exp_123","state":"learn","verdict":"validated","decision":"persevere"} update_feature Update Feature ~233
Update a feature and return it; omitted fields are unchanged. status is 'active' | 'discovered' | 'archived' (there is NO 'shipped' status — set mark_shipped:true to stamp its ship date instead). target_date is 'YYYY-MM-DD' (or null to clear). Resolve the id via list_features; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | New description; null clears it (optional). |
| id | string | yes | Feature id to update, from list_features (required). |
| initiative_id | string | — | Align under this initiative (line-of-sight), from list_initiatives; null unlinks (optional). |
| mark_shipped | boolean | — | true stamps the ship date now; false clears it (optional). |
| name | string | — | New name (optional). |
| objective_id | string | — | Align directly under this objective, from list_objectives; null unlinks (optional). |
| status | string | — | Lifecycle status (optional). |
| target_date | string | — | Target ship date 'YYYY-MM-DD', or null to clear (optional). |
No output schema declared.
{"id":"feat_123","mark_shipped":true} update_idea Update Idea ~139
Update an idea's title / body / status and return it; omitted fields unchanged. status ∈ new|under_review|planned|promoted|declined (set 'promoted' via promote_idea instead, so a feature is actually created). Resolve the id via list_ideas; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | — | New body; null clears it (optional). |
| id | string | yes | Idea id, from list_ideas (required). |
| status | string | — | New status (optional; prefer promote_idea over setting 'promoted' by hand). |
| title | string | — | New title (optional). |
No output schema declared.
{"id":"idea_123","status":"under_review"} update_initiative Update Initiative ~156
Update an initiative and return it; omitted fields are unchanged. Re-point it to a different goal with objective_id (null unlinks). status ∈ planned|active|paused|done|abandoned. Resolve the id via list_initiatives; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | New description; null clears it (optional). |
| id | string | yes | Initiative id, from list_initiatives (required). |
| name | string | — | New name (optional). |
| objective_id | string | — | New parent goal, from list_objectives; null unlinks (optional). |
| status | string | — | Lifecycle status (optional). |
| timeframe | string | — | New timeframe; null clears it (optional). |
No output schema declared.
{"id":"init_123","status":"active"} update_key_result Update Key Result ~147
Update a key result — most often to move current_value as progress lands — and return it; omitted fields are unchanged. Resolve the id via list_objectives (each objective carries its key_results with ids). Only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| current_value | number | — | New current value (optional). |
| id | string | yes | Key result id, from list_objectives (required). |
| name | string | — | New name (optional). |
| start_value | number | — | New starting baseline (optional). |
| target_value | number | — | New target value; null clears it (optional). |
| unit | string | — | New unit, e.g. 'USD'; null clears it (optional). |
No output schema declared.
{"id":"kr_123","current_value":42000} update_objective Update Objective ~125
Update an objective's name / description / period and return it; omitted fields are unchanged (null clears description or period). Resolve the id via list_objectives; only id is required. To move a key result's value use update_key_result.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | New description; null clears it (optional). |
| id | string | yes | Objective id, from list_objectives (required). |
| name | string | — | New name (optional). |
| period | string | — | New period, e.g. 'Q4 2026'; null clears it (optional). |
No output schema declared.
{"id":"obj_123","name":"Reach $75k MRR"} update_page Update Page ~162
Update a Page — rename, set icon, replace the body, or archive/unarchive (archived:true hides it, false restores it). `body` is plain text (blank lines → paragraphs) and REPLACES the page content. Omitted fields are unchanged. Resolve the id via list_pages; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| archived | boolean | — | true archives (hides) the page; false restores it (optional). |
| body | string | — | New content as plain text; blank lines separate paragraphs. REPLACES existing content (optional). |
| icon | string | — | New emoji icon; null clears it (optional). |
| id | string | yes | Page id, from list_pages (required). |
| title | string | — | New title (optional). |
No output schema declared.
{"id":"page_123","archived":true} update_release Update Release ~113
Update a release and return it; omitted fields unchanged. Set released_at to ship it (or null to move it back to draft). Resolve the id via list_releases; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| changelog | string | — | New changelog; null clears it (optional). |
| id | string | yes | Release id, from list_releases (required). |
| released_at | string | — | Ship time ISO 8601, or null for draft (optional). |
| version | string | — | New version (optional). |
No output schema declared.
{"id":"rel_123","released_at":"2026-07-15T12:00:00Z"} update_sprint Update Sprint ~170
Update a sprint and return it. state is 'future' | 'active' | 'closed' — moving to 'closed' stamps the completion time, reopening clears it. start_date / end_date are ISO 8601 (or null to clear). Resolve the id via list_sprints; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | — | End, ISO 8601, or null (optional). |
| goal | string | — | New goal; null clears it (optional). |
| id | string | yes | Sprint id, from list_sprints (required). |
| name | string | — | New name (optional). |
| start_date | string | — | Start, ISO 8601, or null (optional). |
| state | string | — | Lifecycle state; 'closed' completes it (optional). |
No output schema declared.
{"id":"spr_123","state":"closed"} update_task Update Task ~269
Update one or more of a task's fields and return the updated task; fields you omit are left unchanged (idempotent — re-sending the same values is a no-op). Pass sprint_id: null to remove the task from its sprint. Resolve ids first — the task via get_task/list_tasks, and status/feature/insight/sprint/member ids via pm_meta and the list_* reads — never guess them. Only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| assignee_member_ids | array | — | Member ids to assign, from pm_meta (optional). |
| description | string | — | New body / details (optional). |
| feature_id | string | — | Feature id to link on the spine, from pm_meta or list_features (optional). |
| id | string | yes | Task id, from list_tasks or get_task. |
| insight_id | string | — | Insight id to link on the spine, from list_insights (optional). |
| priority | string | — | New priority level, urgent highest (optional). |
| sprint_id | string | — | Move into a sprint, or null to remove (optional; resolve via list_sprints). |
| status_id | string | — | New status; resolve the id via pm_meta (optional). |
| title | string | — | New title (optional; omitted fields stay unchanged). |
No output schema declared.
{"id":"task_8f3a","status_id":"status_in_progress"}{"id":"task_8f3a","sprint_id":"sprint_2026_w27"} vote_idea Vote on Idea ~104
Cast (or remove) the connected member's vote on an idea and return the new vote state. Adds your vote by default; pass remove:true to take it back. One vote per member — voting twice is a no-op. Resolve the id via list_ideas; only id is required.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Idea id, from list_ideas (required). |
| remove | boolean | — | true removes your vote instead of adding it (optional; default false). |
No output schema declared.
{"id":"idea_123"} whoami Connected Identity ~83
Show the connected AIOProductOS identity (org, member) AND the org's products (id, name, is_primary). Read-only; returns the identity plus the product list. For a multi-product org, call this first to get the product ids, then pass one as `product_id` to any product-scoped tool; omit product_id to use the primary.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.