Arbo

SEO site architecture. Page trees with URL, keyword, status, keyword map and redirect plan exports.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "arbo": {
      "url": "https://getarbo.com/api/mcp"
    }
  }
}

Puntos de conexión remotos

https://getarbo.com/api/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (8)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢list_projects

List all projects accessible with this token

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_project(project_id)

Get a project with its full sitemap tree

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "description": "The project ID"
    }
  },
  "required": [
    "project_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_project(name, client, accent)

Create a new project. Returns the project ID. Add nodes with create_node after.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Project name"
    },
    "client": {
      "description": "Client name",
      "type": "string"
    },
    "accent": {
      "description": "Accent color hex (e.g. #2563EB)",
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_node(project_id, label, type, priority, description, ...)

Add a page to a project's sitemap. Use parent_id to create hierarchy. Supports rich data: zoning blocks (wireframe layout), entry points (traffic sources), CTAs, and tags.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "description": "The project ID"
    },
    "label": {
      "type": "string",
      "description": "Page name (e.g. 'Accueil', 'Contact')"
    },
    "type": {
      "description": "Page type: home, listing, detail, form, landing, quiz, search, hub, error, legal",
      "type": "string"
    },
    "priority": {
      "description": "Page importance",
      "type": "string",
      "enum": [
        "primary",
        "secondary",
        "utility"
      ]
    },
    "description": {
      "description": "Page description. Use real newlines for formatting. Supports long multiline content (SEO, copy, sections, CTAs, FAQ). No length limit.",
      "type": "string"
    },
    "parent_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Parent node ID. Null = root page."
    },
    "rationale": {
      "description": "Why this page exists (UX insight)",
      "type": "string"
    },
    "notes": {
      "description": "Additional notes",
      "type": "string"
    },
    "cta": {
      "description": "Call-to-action button labels (e.g. ['Acheter', 'En savoir plus'])",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "tags": {
      "description": "Tags for categorization (e.g. ['SEO', 'conversion'])",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "entry_points": {
      "description": "Traffic entry points for this page",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "google",
              "direct",
              "nav",
              "social",
              "email",
              "ads",
              "qrcode"
            ]
          },
          "label": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "label"
        ]
      }
    },
    "zoning_blocks": {
      "description": "Wireframe zoning blocks (page layout structure)",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique block ID (e.g. 'z1')"
          },
          "label": {
            "type": "string",
            "description": "Block label (e.g. 'Hero', 'Navigation')"
          },
          "skin": {
            "type": "string",
            "description": "Block skin: nav, hero, breadcrumb, titre, contenu, sidebar, cards, grille, filtres, cta, double-cta, form, submit, arguments, social-proof, image, question, reponses, progression, nav-quiz, search-bar, resultats, pagination, footer, dots"
          },
          "height": {
            "type": "number",
            "description": "Visual height in px (e.g. 18 for nav, 64 for hero, 60 for contenu)"
          }
        },
        "required": [
          "id",
          "label",
          "skin",
          "height"
        ]
      }
    },
    "zoning_expanded": {
      "description": "If true, zoning is shown expanded by default on the canvas",
      "type": "boolean"
    },
    "seo": {
      "description": "SEO data of the page: URL, target keyword, volume, intent, migration status",
      "type": "object",
      "properties": {
        "url": {
          "description": "Page URL or path (e.g. '/services/audit-seo')",
          "type": "string"
        },
        "keyword": {
          "description": "Main target keyword",
          "type": "string"
        },
        "volume": {
          "description": "Monthly search volume of the main keyword",
          "type": "number"
        },
        "intent": {
          "type": "string",
          "enum": [
            "informational",
            "navigational",
            "commercial",
            "transactional"
          ]
        },
        "status": {
          "description": "keep = existing page kept, create = new page, redirect = 301 to redirect_to, delete = removed (410)",
          "type": "string",
          "enum": [
            "keep",
            "create",
            "redirect",
            "delete"
          ]
        },
        "redirectTo": {
          "description": "Destination URL when status is 'redirect'",
          "type": "string"
        }
      }
    }
  },
  "required": [
    "project_id",
    "label"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡update_node(project_id, node_id, label, type, priority, ...)

Update a page's properties. For the description field: use real newlines (not literal \n). Supports rich multiline content: SEO notes, copy, sections, CTAs, FAQ, maillage, etc. No length limit. You can also set zoning_html (full wireframe HTML) and annotations (contextual notes per wireframe section).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "description": "The project ID"
    },
    "node_id": {
      "type": "string",
      "description": "The node ID to update"
    },
    "label": {
      "description": "New page name",
      "type": "string"
    },
    "type": {
      "description": "New page type",
      "type": "string"
    },
    "priority": {
      "type": "string",
      "enum": [
        "primary",
        "secondary",
        "utility"
      ]
    },
    "description": {
      "description": "Page description. Use real newlines for formatting. Supports long multiline content (SEO, copy, sections, CTAs, FAQ). No length limit.",
      "type": "string"
    },
    "rationale": {
      "type": "string"
    },
    "notes": {
      "type": "string"
    },
    "parent_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Move to new parent"
    },
    "zoning_html": {
      "description": "Full wireframe HTML (lo-fi, inline CSS, standalone). Replaces the current wireframe for this page.",
      "type": "string"
    },
    "annotations": {
      "description": "Contextual annotations for wireframe sections. These appear as a sidebar alongside the wireframe preview.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique annotation ID (e.g. 'ann_1')"
          },
          "section": {
            "type": "string",
            "description": "Section name in the wireframe this annotation refers to (e.g. 'Hero', 'Navigation')"
          },
          "tag": {
            "type": "string",
            "enum": [
              "UX",
              "COPY",
              "SEO",
              "DEV",
              "DESIGN",
              "A11Y",
              "PERF",
              "TODO"
            ],
            "description": "Annotation category"
          },
          "title": {
            "type": "string",
            "description": "Short annotation title"
          },
          "body": {
            "type": "string",
            "description": "Detailed annotation content"
          }
        },
        "required": [
          "id",
          "section",
          "tag",
          "title",
          "body"
        ]
      }
    },
    "seo": {
      "description": "SEO data. Fields sent are merged into the existing SEO block.",
      "type": "object",
      "properties": {
        "url": {
          "description": "Page URL or path (e.g. '/services/audit-seo')",
          "type": "string"
        },
        "keyword": {
          "description": "Main target keyword",
          "type": "string"
        },
        "volume": {
          "description": "Monthly search volume of the main keyword",
          "type": "number"
        },
        "intent": {
          "type": "string",
          "enum": [
            "informational",
            "navigational",
            "commercial",
            "transactional"
          ]
        },
        "status": {
          "description": "keep = existing page kept, create = new page, redirect = 301 to redirect_to, delete = removed (410)",
          "type": "string",
          "enum": [
            "keep",
            "create",
            "redirect",
            "delete"
          ]
        },
        "redirectTo": {
          "description": "Destination URL when status is 'redirect'",
          "type": "string"
        }
      }
    }
  },
  "required": [
    "project_id",
    "node_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪generate_wireframe(project_id, node_id)

Generate a lo-fi wireframe HTML for a page using AI. The wireframe is saved to the node's zoningHtml field. Requires zoning blocks to be defined on the node. Costs 1 AI credit (or uses BYOK key). Returns the generated HTML.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "description": "The project ID"
    },
    "node_id": {
      "type": "string",
      "description": "The node ID to generate wireframe for"
    }
  },
  "required": [
    "project_id",
    "node_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_node(project_id, node_id, cascade)

Remove a page from the sitemap (soft delete, can be restored via version history)

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "description": "The project ID"
    },
    "node_id": {
      "type": "string",
      "description": "The node ID to delete"
    },
    "cascade": {
      "description": "If true, also deletes all children. Default: false (children are reparented to grandparent)",
      "type": "boolean"
    }
  },
  "required": [
    "project_id",
    "node_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡bulk_create_nodes(project_id, nodes)

Create multiple pages at once from a tree structure. Ideal for generating a full sitemap with zoning, entry points, CTAs and tags.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "description": "The project ID"
    },
    "nodes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "temp_id": {
            "type": "string",
            "description": "Temporary ID for referencing as parent (e.g. 'home', 'about')"
          },
          "parent_temp_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Temp ID of the parent node. Null = root."
          },
          "label": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "priority": {
            "type": "string",
            "enum": [
              "primary",
              "secondary",
              "utility"
            ]
          },
          "description": {
            "type": "string"
          },
          "rationale": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "cta": {
            "description": "Call-to-action labels",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "description": "Tags",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "entry_points": {
            "description": "Traffic sources",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "google",
                    "direct",
                    "nav",
                    "social",
                    "email",
                    "ads",
                    "qrcode"
                  ]
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "type",
                "label"
              ]
            }
          },
          "zoning_blocks": {
            "description": "Wireframe zoning blocks",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "skin": {
                  "type": "string",
                  "description": "nav, hero, breadcrumb, titre, contenu, sidebar, cards, grille, filtres, cta, double-cta, form, submit, arguments, social-proof, image, question, reponses, progression, nav-quiz, search-bar, resultats, pagination, footer, dots"
                },
                "height": {
                  "type": "number"
                }
              },
              "required": [
                "id",
                "label",
                "skin",
                "height"
              ]
            }
          },
          "zoning_expanded": {
            "type": "boolean"
          },
          "seo": {
            "description": "SEO data of the page: URL, target keyword, volume, intent, migration status",
            "type": "object",
            "properties": {
              "url": {
                "description": "Page URL or path (e.g. '/services/audit-seo')",
                "type": "string"
              },
              "keyword": {
                "description": "Main target keyword",
                "type": "string"
              },
              "volume": {
                "description": "Monthly search volume of the main keyword",
                "type": "number"
              },
              "intent": {
                "type": "string",
                "enum": [
                  "informational",
                  "navigational",
                  "commercial",
                  "transactional"
                ]
              },
              "status": {
                "description": "keep = existing page kept, create = new page, redirect = 301 to redirect_to, delete = removed (410)",
                "type": "string",
                "enum": [
                  "keep",
                  "create",
                  "redirect",
                  "delete"
                ]
              },
              "redirectTo": {
                "description": "Destination URL when status is 'redirect'",
                "type": "string"
              }
            }
          }
        },
        "required": [
          "temp_id",
          "parent_temp_id",
          "label"
        ]
      },
      "description": "Flat list of nodes with temp_id references for parent-child relationships"
    }
  },
  "required": [
    "project_id",
    "nodes"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada8 herramientas