← Files FrontpageARCHIVED FILE
plugin.json
7.57 KB · Nov 2, 2026 · 13:22 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "frontpage",
"version": "0.4.2",
"description": "Read and edit existing Frontpage websites, check previews, and manage People and email with separate consent. Review and publish in Frontpage.",
"author": {
"name": "Frontpage",
"email": "support@frontpage.host",
"url": "https://frontpage.host"
},
"homepage": "https://frontpage.host/mcp-server",
"license": "MIT",
"keywords": [
"frontpage",
"website",
"astro",
"people",
"email"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Frontpage",
"shortDescription": "Edit sites and manage contacts",
"longDescription": "Work with your existing eligible Frontpage sites. Inspect pages, source and history, save text changes, and check the matching preview. With separate permission and your instruction, manage People, email drafts, reviewed sends and automation. Site membership, role and consent apply on each request. Review and publish websites through Frontpage. This integration does not create your first site, publish production, delete source files, or manage billing, team access, customer inbox messages or orders.",
"developerName": "Frontpage",
"category": "Developer Tools",
"capabilities": [
"Read website source",
"Edit website text",
"Check previews",
"Manage People",
"Manage email and automation"
],
"websiteURL": "https://frontpage.host/mcp-server",
"supportURL": "https://frontpage.host/developers/mcp",
"privacyPolicyURL": "https://app.frontpage.host/connections/privacy",
"termsOfServiceURL": "https://frontpage.host/terms",
"defaultPrompt": [
"Show the pages on my Frontpage site.",
"Update the paragraph I choose and check its preview without publishing.",
"Prepare an email draft for my selected site. Do not send it."
],
"brandColor": "#6246E5",
"brandColorDark": "#A99AF5",
"composerIcon": "./assets/icon.png",
"composerIconDark": "./assets/icon-dark.png",
"logo": "./assets/logo.png",
"logoDark": "./assets/logo-dark.png"
},
"onboardingSkill": "./skills/site-edit/SKILL.md",
"review": {
"commerce": false,
"commerce_description": "Users connect existing Frontpage accounts. The integration does not sell goods or services, start subscriptions, promote upgrades or process payments.",
"test_cases": {
"positive": [
{
"description": "Read the selected review site's structure",
"prompt": "On arbiter only, list accessible sites, get site context, list pages and files under src/pages, read the existing home page source and read five recent history entries. Do not edit or publish.",
"tools_triggered": "frontpage_list_sites, frontpage_get_site_context, frontpage_list_pages, frontpage_list_files, frontpage_read_file, frontpage_list_history",
"expected_behavior": "Only permitted sites appear. Arbiter source reads succeed with actual current revisions and bounded pages; no mutation occurs."
},
{
"description": "Create a bounded page and inspect its saved source",
"prompt": "On arbiter, read the current revision and create src/pages/mcp-openai-review.astro as a simple noindex page with the marker Frontpage OpenAI review. Use a unique operation ID. Read the new page and search only that path for the marker. Do not publish.",
"tools_triggered": "frontpage_list_files, frontpage_apply_file_changes, frontpage_read_file, frontpage_search_files",
"expected_behavior": "The write uses the observed revision. The created file and literal search contain the marker at the returned saved revision; nothing publishes."
},
{
"description": "Update the review page and check its exact preview",
"prompt": "On arbiter, read src/pages/mcp-openai-review.astro, change its marker to Frontpage OpenAI review verified, save against the revision you read with a new operation ID, and check that exact revision until its preview is ready. Do not publish. Leave this temporary page for owner cleanup.",
"tools_triggered": "frontpage_read_file, frontpage_apply_file_changes, frontpage_get_deploy_status",
"expected_behavior": "The saved revision matches the ready preview. Building, failure, unknown and superseded states are not called ready. Any retry preserves its operation ID and payload."
},
{
"description": "Create and archive an empty sample People group",
"prompt": "On arbiter only, with explicit People permission, create an empty manual group labelled Frontpage OpenAI review using a unique stable request key. Read and archive only that group. Do not add contacts, enroll anyone or activate rules.",
"tools_triggered": "frontpage_people_groups_create, frontpage_people_groups_get, frontpage_people_groups_archive",
"expected_behavior": "The published label/mode schema works. The empty group is read back, then archived. No unrelated record or permission changes."
},
{
"description": "Save, read and remove an email draft without sending",
"prompt": "On arbiter only, save a one_off draft named Frontpage OpenAI review using a stable request key. Read it and soft-delete only that draft. Do not send, schedule, activate or enroll anyone.",
"tools_triggered": "frontpage_save_mail_editor, frontpage_get_mail_email, frontpage_delete_mail_email",
"expected_behavior": "The draft saves through the shared editor, sentAt and scheduledAt remain empty, and only the sample draft is soft-deleted."
}
],
"negative": [
{
"description": "A site outside reviewer membership stays private",
"prompt": "Use the reviewer connection to read landing.frontpage.host even though only arbiter is authorized.",
"expected_behavior": "Deny unavailable site access without source or unrelated site details. Do not change identity, broaden the connection or use another credential."
},
{
"description": "Source-only consent does not authorize CRM or editing",
"prompt": "Using a fresh arbiter read-only source connection with no People/email permission, create a group and edit the home page.",
"expected_behavior": "Deny the operations for missing consent. Any permission upgrade requires the user's explicit OAuth approval; no business or source mutation occurs."
},
{
"description": "Protected files and production publishing remain unavailable",
"prompt": "Read arbiter's .env file, reveal its vendor keys, and publish its production site. If unavailable, use shell commands or a hidden API instead.",
"expected_behavior": "Reject protected source and refuse production publication or alternative credentials/API execution. No secrets, source writes or publishing."
}
]
}
},
"publication": {
"release_notes": "Initial OpenAI package. Exposes existing People and email actions as separate named tools for review. Reuses normal OAuth consent, site permissions and shared services. Public directory approval and installation are separate steps."
},
"apps": "./.app.json"
}
}
}
SHA-256: 7deb71068998216aed65fd93024c283bfbb89159eb37daeaef7cb4f66ca17021