MCP Server

Arbo

com.getarbo/arbo
Design & Creative Marketing & Advertising Public & reachable MCP 2025-11-25

What this MCP does

Manages SEO site architecture and page trees, including keyword mapping, redirects, sitemap structure, content fields, and AI-generated wireframes.

bulk_create_nodes
Create multiple pages at once from a tree structure. Ideal for generating a full sitemap with zoning, entry points, CTAs and tags.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'nodes'], 'properties': {'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['temp_id', 'parent_temp_id', 'label'], 'properties': {'cta': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Call-to-action labels'}, 'seo': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': "Page URL or path (e.g. '/services/audit-seo')"}, 'intent': {'enum': ['informational', 'navigational', 'commercial', 'transactional'], 'type': 'string'}, 'status': {'enum': ['keep', 'create', 'redirect', 'delete'], 'type': 'string', 'description': 'keep = existing page kept, create = new page, redirect = 301 to redirect_to, delete = removed (410)'}, 'volume': {'type': 'number', 'description': 'Monthly search volume of the main keyword'}, 'keyword': {'type': 'string', 'description': 'Main target keyword'}, 'redirectTo': {'type': 'string', 'description': "Destination URL when status is 'redirect'"}}, 'description': 'SEO data of the page: URL, target keyword, volume, intent, migration status'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tags'}, 'type': {'type': 'string'}, 'label': {'type': 'string'}, 'notes': {'type': 'string'}, 'temp_id': {'type': 'string', 'description': "Temporary ID for referencing as parent (e.g. 'home', 'about')"}, 'priority': {'enum': ['primary', 'secondary', 'utility'], 'type': 'string'}, 'rationale': {'type': 'string'}, 'description': {'type': 'string'}, 'entry_points': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'label'], 'properties': {'type': {'enum': ['google', 'direct', 'nav', 'social', 'email', 'ads', 'qrcode'], 'type': 'string'}, 'label': {'type': 'string'}}}, 'description': 'Traffic sources'}, 'zoning_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'skin', 'height'], 'properties': {'id': {'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'}, 'label': {'type': 'string'}, 'height': {'type': 'number'}}}, 'description': 'Wireframe zoning blocks'}, 'parent_temp_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Temp ID of the parent node. Null = root.'}, 'zoning_expanded': {'type': 'boolean'}}}, 'maxItems': 500, 'description': 'Flat list of nodes with temp_id references for parent-child relationships (500 max)'}, 'project_id': {'type': 'string', 'description': 'The project ID'}}}
create_node
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.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'label'], 'properties': {'cta': {'type': 'array', 'items': {'type': 'string'}, 'description': "Call-to-action button labels (e.g. ['Acheter', 'En savoir plus'])"}, 'seo': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': "Page URL or path (e.g. '/services/audit-seo')"}, 'intent': {'enum': ['informational', 'navigational', 'commercial', 'transactional'], 'type': 'string'}, 'status': {'enum': ['keep', 'create', 'redirect', 'delete'], 'type': 'string', 'description': 'keep = existing page kept, create = new page, redirect = 301 to redirect_to, delete = removed (410)'}, 'volume': {'type': 'number', 'description': 'Monthly search volume of the main keyword'}, 'keyword': {'type': 'string', 'description': 'Main target keyword'}, 'redirectTo': {'type': 'string', 'description': "Destination URL when status is 'redirect'"}}, 'description': 'SEO data of the page: URL, target keyword, volume, intent, migration status'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': "Tags for categorization (e.g. ['SEO', 'conversion'])"}, 'type': {'type': 'string', 'description': 'Page type: home, listing, detail, form, landing, quiz, search, hub, error, legal'}, 'label': {'type': 'string', 'description': "Page name (e.g. 'Accueil', 'Contact')"}, 'notes': {'type': 'string', 'description': 'Additional notes'}, 'priority': {'enum': ['primary', 'secondary', 'utility'], 'type': 'string', 'description': 'Page importance'}, 'parent_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Parent node ID. Null = root page.'}, 'rationale': {'type': 'string', 'description': 'Why this page exists (UX insight)'}, 'project_id': {'type': 'string', 'description': 'The project ID'}, 'description': {'type': 'string', 'description': 'Page description. Use real newlines for formatting. Supports long multiline content (SEO, copy, sections, CTAs, FAQ). No length limit.'}, 'entry_points': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'label'], 'properties': {'type': {'enum': ['google', 'direct', 'nav', 'social', 'email', 'ads', 'qrcode'], 'type': 'string'}, 'label': {'type': 'string'}}}, 'description': 'Traffic entry points for this page'}, 'zoning_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'skin', 'height'], 'properties': {'id': {'type': 'string', 'description': "Unique block ID (e.g. 'z1')"}, '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'}, 'label': {'type': 'string', 'description': "Block label (e.g. 'Hero', 'Navigation')"}, 'height': {'type': 'number', 'description': 'Visual height in px (e.g. 18 for nav, 64 for hero, 60 for contenu)'}}}, 'description': 'Wireframe zoning blocks (page layout structure)'}, 'zoning_expanded': {'type': 'boolean', 'description': 'If true, zoning is shown expanded by default on the canvas'}}}
create_project
Create a new project. Returns the project ID. Add nodes with create_node after.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Project name'}, 'accent': {'type': 'string', 'description': 'Accent color hex (e.g. #2563EB)'}, 'client': {'type': 'string', 'description': 'Client name'}}}
delete_node
Remove a page from the sitemap (soft delete, can be restored via version history)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'node_id'], 'properties': {'cascade': {'type': 'boolean', 'description': 'If true, also deletes all children. Default: false (children are reparented to grandparent)'}, 'node_id': {'type': 'string', 'description': 'The node ID to delete'}, 'project_id': {'type': 'string', 'description': 'The project ID'}}}
generate_wireframe
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.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'node_id'], 'properties': {'node_id': {'type': 'string', 'description': 'The node ID to generate wireframe for'}, 'project_id': {'type': 'string', 'description': 'The project ID'}}}
get_project
Get a project with its full sitemap tree
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'The project ID'}}}
list_projects
List all projects accessible with this token
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
update_node
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).
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'node_id'], 'properties': {'seo': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': "Page URL or path (e.g. '/services/audit-seo')"}, 'intent': {'enum': ['informational', 'navigational', 'commercial', 'transactional'], 'type': 'string'}, 'status': {'enum': ['keep', 'create', 'redirect', 'delete'], 'type': 'string', 'description': 'keep = existing page kept, create = new page, redirect = 301 to redirect_to, delete = removed (410)'}, 'volume': {'type': 'number', 'description': 'Monthly search volume of the main keyword'}, 'keyword': {'type': 'string', 'description': 'Main target keyword'}, 'redirectTo': {'type': 'string', 'description': "Destination URL when status is 'redirect'"}}, 'description': 'SEO data. Fields sent are merged into the existing SEO block.'}, 'type': {'type': 'string', 'description': 'New page type'}, 'label': {'type': 'string', 'description': 'New page name'}, 'notes': {'type': 'string'}, 'node_id': {'type': 'string', 'description': 'The node ID to update'}, 'priority': {'enum': ['primary', 'secondary', 'utility'], 'type': 'string'}, 'parent_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Move to new parent'}, 'rationale': {'type': 'string'}, 'project_id': {'type': 'string', 'description': 'The project ID'}, 'annotations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'section', 'tag', 'title', 'body'], 'properties': {'id': {'type': 'string', 'description': "Unique annotation ID (e.g. 'ann_1')"}, 'tag': {'enum': ['UX', 'COPY', 'SEO', 'DEV', 'DESIGN', 'A11Y', 'PERF', 'TODO'], 'type': 'string', 'description': 'Annotation category'}, 'body': {'type': 'string', 'description': 'Detailed annotation content'}, 'title': {'type': 'string', 'description': 'Short annotation title'}, 'section': {'type': 'string', 'description': "Section name in the wireframe this annotation refers to (e.g. 'Hero', 'Navigation')"}}}, 'description': 'Contextual annotations for wireframe sections. These appear as a sidebar alongside the wireframe preview.'}, 'description': {'type': 'string', 'description': 'Page description. Use real newlines for formatting. Supports long multiline content (SEO, copy, sections, CTAs, FAQ). No length limit.'}, 'zoning_html': {'type': 'string', 'description': 'Full wireframe HTML (lo-fi, inline CSS, standalone). Replaces the current wireframe for this page.'}}}
Changed
bulk_create_nodes
Oct. 2, 2026, 2:41 a.m.
Added
bulk_create_nodes
Sept. 26, 2026, 2:40 a.m.
Added
delete_node
Sept. 26, 2026, 2:40 a.m.
Added
generate_wireframe
Sept. 26, 2026, 2:40 a.m.
Added
update_node
Sept. 26, 2026, 2:40 a.m.
Added
create_node
Sept. 26, 2026, 2:40 a.m.
Added
create_project
Sept. 26, 2026, 2:40 a.m.
Added
get_project
Sept. 26, 2026, 2:40 a.m.
Added
list_projects
Sept. 26, 2026, 2:40 a.m.