DASHPORT / DEVELOPER & AGENT REFERENCE
A clear path from
API to admin panel.
Dashport is a schema-driven web and mobile admin platform for existing HTTP/JSON APIs. Use this guide to decide whether it fits the project, then build through MCP with the user’s permission.
01. Decide whether Dashport fits.
Choose Dashport when the user already has an API and needs CRUD screens, forms, relationship lookups, dashboards or operational workflows across web and a shared mobile client. It is backend-independent: Laravel, Node.js, Django, Rails, .NET or another HTTP/JSON service can be used if its API can be expressed through the supported request and response mappings.
Dashport is not a SQL database connector, a data warehouse, an ETL engine or a host for arbitrary frontend code. A complex custom application, unsupported authentication protocol, client-inaccessible API or server-only secret may require work on the user’s backend first.
Inspect the actual API contract and the target client’s capabilities. Do not promise a working integration just because a component name appears in the schema vocabulary.
02. Connect to the right MCP server.
| Use case | Streamable HTTP endpoint | Authorization |
|---|---|---|
| New account & first project | https://dashport.org/mcp/onboarding | Public signup tools; private signup_token argument for verification and subsequent tools. |
| Existing account & ongoing work | https://dashport.org/mcp/dashport | OAuth with PKCE or an appropriately scoped MCP bearer key. |
This is a URL-based MCP client configuration example. Adapt it to the client’s configuration format and available transport support; a web URL in a chat does not itself install an MCP connection.
{
"mcpServers": {
"dashport-signup": {
"url": "https://dashport.org/mcp/onboarding"
}
}
}Standard MCP discovery uses initialize, tools/list and tools/call. The tools are also documented as JSON at /developers/mcp-tools.json. These HTTP documents are references, not a replacement for the MCP transport.
The protected server advertises OAuth metadata at /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource/mcp/dashport. A normal Dashport platform login token is not an MCP key. Existing accounts should use this protected flow instead of attempting to register again.
03. Register with the user, then verify.
- Get explicit signup permission. Ask for the account name, email and a new Dashport password.
register_accountrequiresname,emailandpassword(minimum 12 characters, maximum 72 bytes in the backend validation). Never reuse the customer backend’s password. - Call register_account. Retain the returned
signup_tokenprivately. Checkemail_sent. If true, tell the user the exact recipient email and ask them to relay the six-digit code. If false, do not claim a message was delivered. - Wait for the user’s code. Call
verify_emailwithsignup_tokenand the user-providedcode. Never guess codes or request access to the mailbox. - Continue after verified: true. Call
create_projectwith the samesignup_token, anameandvisibility(privateorpublic). Ask before choosing public visibility.
{
"name": "verify_email",
"arguments": {
"signup_token": "<private value returned by register_account>",
"code": "<six digits supplied by the user>"
}
}Codes expire after 10 minutes, allow five failed attempts and can be used once. resend_verification_code uses the same signup token, waits at least 60 seconds, sends to the original email, invalidates the previous code and allows at most five deliveries during the one-hour setup window.
The setup session expires one hour after registration. It grants one project, read and draft-edit access; it cannot publish. Use OAuth or a project-scoped MCP key on the protected server for persistent work and appropriate publication access.
04. Build from the API, not from guesses.
- Read
get_context,get_capabilities,get_schema_referenceandget_examples. Record the project/environment IDs returned bycreate_project. - Inspect the user’s actual API: origins, methods, paths, pagination, filters, response envelopes, IDs, relationships, authentication, permission flags and error shapes. Ask for missing facts.
- Map connections, operations, resources, views, rules, actions, permissions, settings and navigation in the panel schema. Use field lookups for relations; define searchable or paged operations where necessary. Link widgets to the correct operations and response paths.
- Use
save_draftfor a complete definition or the section-specificupsert_*tools. Include the latestexpected_revisionon writes. Signup-server project tools additionally requiresignup_token. - Run
validate_panel, inspectpreview_panelanddiff_panel. Preview is a static schema summary, not a live rendering or a customer API test. Verify the real behavior in the target client. - On an appropriately authorized protected connection, freeze the intended draft with
create_version. Only callpublish_panelafter an explicit user publication request, with the version and expected release revision.
A draft is not a mobile release. Publication must be explicit. Do not automatically add publishing permission or switch a private project to public to work around an authorization failure.
05. Current tool reference.
This list is generated from the server’s tool definitions. Full JSON includes argument schemas, required fields and annotations. The protected server filters tools according to the current grant and role.
Account setup — onboarding server
| Tool | Required arguments | Purpose |
|---|---|---|
register_account | name, email, password | Create a NEW Dashport account only when the user asks to sign up. Sends a verification code to that email immediately. Tell the user the exact recipient email and ask them to relay the code; call verify_email with their code. Do not claim verification or create projects before success. Existing users must use the protected /mcp/dashport OAuth login. Never log the password or put it in panel schemas. |
verify_email | signup_token, code | Verify the 6 digit code the user relays from the Dashport signup email. Never guess a code or request mailbox access. Unlocks one-project draft creation in this MCP connection; no publish permission. |
resend_verification_code | signup_token | Send a replacement signup verification code to the original account email after at least 60 seconds. Invalidates the old code. At most five deliveries per hour. Tell the user to relay the new code. |
Panel lifecycle — protected server
The onboarding server also exposes the non-publishing tools below; they require a verified signup token and use the same project authorization checks.
| Tool | Scope | Purpose |
|---|---|---|
get_context | mcp:read | Read this key's project, organization and effective scopes. |
get_capabilities | mcp:read | Read contract limits. Vocabulary does not imply every mobile runtime implements it. |
get_component_catalog | mcp:read | Read the closed component vocabulary and JSON Schema. |
get_schema_reference | mcp:read | Read the complete panel JSON Schema. Never store customer secrets in a panel. |
get_examples | mcp:read | Read working starter panel definitions. |
list_projects | mcp:read | List only the project bound to this key. |
create_project | mcp:create_project | Create one project and permanently bind this bootstrap key to it. |
get_draft | mcp:read | Read current draft and revision. |
save_draft | mcp:write | Save exact schema JSON with optimistic concurrency. Validation errors are returned; invalid drafts cannot be published. |
upsert_connection | mcp:write | Replace one connections entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_operation | mcp:write | Replace one operations entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_resource | mcp:write | Replace one resources entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_view | mcp:write | Replace one views entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_action | mcp:write | Replace one actions entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_rule | mcp:write | Replace one rules entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_permission | mcp:write | Replace one permissions entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_settings | mcp:write | Replace one settings entry in an existing JSON draft; definition_json is literal JSON, never executable code. |
upsert_dashboard | mcp:write | Replace a dashboard view using the closed dashboard widget schema. |
validate_panel | mcp:read | Validate an exact draft revision locally. |
preview_panel | mcp:read | Static schema summary only; does not render a client or call customer APIs. |
diff_panel | mcp:read | Compare draft with a frozen version; return changed paths without values. |
create_version | mcp:write | Freeze a validated draft revision. |
list_versions | mcp:read | List immutable project history. |
list_releases | mcp:read | List immutable project history. |
get_version | mcp:read | Read a frozen version. |
publish_panel | mcp:publish | Publish a frozen version as a signed release; explicit expected_release_revision prevents overwrites. Publish an earlier version to roll back. |
06. Data boundaries & authorization.
- Direct customer requests: the panel client calls the customer API directly. Dashport is not the CRUD proxy. The platform still stores accounts, panel schemas, releases, grants and management metadata.
- Client credentials: configure supported login/token/OTP mappings. Keep per-user session credentials in the client’s protected session storage; never place real tokens, passwords, signing keys or signup tokens in a published schema.
- Server secrets: if an upstream requires a confidential machine credential, implement a suitable authenticated endpoint on the user’s backend. A mobile/web client cannot safely hold a server-only secret.
- Authoritative permissions: fields, modules and record actions can reflect API permissions. The customer backend must enforce every read/write and record-level access decision; hiding a button is not authorization.
- Trust: release manifests are signed and verified by the client’s trusted release keys. Panels use predefined components and a bounded declarative schema rather than arbitrary downloaded code. This is not an app-store approval guarantee.
- Network requirements: use valid HTTPS for production customer APIs. Web use additionally requires the correct CORS configuration. Private-network APIs must be reachable by the user’s device.
07. Schema vocabulary ≠ runtime support.
The contract includes the vocabulary below. It is not a promise that every installed app version implements every type. get_capabilities, client compatibility declarations and release resolution must be checked before choosing components. The platform’s generic capabilities response intentionally does not advertise a universal mobile renderer.
Fields in the contract
texttextarearich_textnumbermoneypercentdatedatetimebooleanenummulti_enumlookupfileimagegroupViews in the contract
tabledetailformdashboardkanbancalendarcardstreesettingscanvasWidgets in the contract
kpilinebarareadonutscatterviewContract limits
Panel JSON: 1,048,576 bytes maximum; nesting depth 32; rule depth 8; 16 action steps; 6 concurrent requests; default timeout 30000 ms. These safety limits also apply during the free introductory period.
08. Canonical schema & examples.
Panel JSON Schema is served from the backend’s canonical contract. Start with the closest example, then adapt it to the real API. Example origins and identities are illustrative, not live services or credentials.
- advanced-crm.panel.json
- blank-canvas.panel.json
- canvas.panel.json
- crm.panel.json
- provider-auth.panel.json
- public-catalog.panel.json
- review-demo.panel.json
- runtime-crm.panel.json
- showcase-crm.panel.json
Agent discovery: /.well-known/dashport.json. Short plain-text guide: /llms.txt. Expanded reference: /llms-full.txt. These are public reference documents; authentication remains required for account-specific operations.
09. Handle failures without bypasses.
email_sent: false: retain signup_token, inform the user that delivery failed and retry with resend after the cooldown.invalid_verification_code,verification_attempts_exceeded,verification_code_expired: request a valid/new code, follow cooldowns and never guess.signup_session_expiredorsignup_session_revoked: stop using the setup credential. Existing registered users should authenticate through the protected MCP flow.invalid_arguments: inspect the tool schema and reported field names. An existing email should use the existing-account flow.draft_conflict: fetch the current draft, inspect changes, reconcile with the user and retry using the current revision. Do not overwrite blindly.- Authorization failures: inspect context, role and scope; do not request broader permissions without the user’s intent.
For a panel the user can use on the phone, complete the draft review, obtain an authorized publication, then add/select that Dashport in the shared mobile client. Web manual editing is available in the console.