askboard-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@askboard-mcpcollect my input on the meeting schedule options"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
askboard-mcp
askboard-mcp is a local MCP server for collecting structured human input from a browser. An AI client sends a form schema, Askboard opens a local web page, the user submits answers, and the MCP tool returns normalized JSON. It also keeps a searchable history dashboard so previous requests and edits stay reviewable.
The UI is rendered by the server itself, so it does not require MCP-UI support from Claude Code, Cursor, Cline, or other MCP clients.
Features
ask_user: open a browser form with single-choice, multi-choice, free-text, required fields, and custom write-in options.open_dashboard: open the local history dashboard.get_updates: read only sessions changed after a revision watermark.Searchable history: left-side session list, status filters, and right-side detail view.
Editable history: update past answers from the dashboard; edits bump the session
rev.Local-only storage: history is saved as JSON under
~/.askboard-mcpby default.
Related MCP server: codepet-mcp-server
Install
npm install -g askboard-mcpThe package requires Node.js 20 or newer.
MCP Client Configuration
After installing from npm:
{
"mcpServers": {
"askboard": {
"command": "askboard-mcp"
}
}
}For local development from this repository:
{
"mcpServers": {
"askboard": {
"command": "node",
"args": ["/absolute/path/to/askboard-mcp/dist/index.js"]
}
}
}Usage
Ask your AI client to use ask_user when it needs several decisions at once:
{
"title": "Confirm refactor scope",
"intro": "Select the changes you want included.",
"fields": [
{
"id": "scope",
"label": "Scope",
"type": "multi",
"options": ["Split service layer", "Replace logger", "Add tests"],
"allowCustom": true,
"required": true
},
{
"id": "priority",
"label": "Priority",
"type": "single",
"options": ["Now", "Next iteration", "Defer"]
},
{
"id": "notes",
"label": "Notes",
"type": "text",
"placeholder": "Optional"
}
]
}The returned result includes the session id, status, revision, normalized answers, and dashboard URL.
Tools
ask_user
Shows an interactive browser form and waits for submission. Supported field types:
single: one radio option, optionally withallowCustom.multi: checkbox options, optionally withallowCustom.text: free-form text area.
open_dashboard
Opens http://127.0.0.1:<port>/dashboard. The dashboard has a left history rail, search, status filters, and a detail pane. Editing a pending record also answers the waiting tool call.
get_updates
Reads history incrementally:
{ "sinceRevision": 12 }Response:
{
"revision": 15,
"sinceRevision": 12,
"count": 1,
"changes": []
}Pass the returned revision into the next get_updates call to avoid re-reading full history.
Environment Variables
Variable | Purpose | Default |
| Starting port for the local web server. If busy, Askboard probes the next ports. |
|
| How long |
|
| Directory for |
|
Development
npm install
npm run build
npm test
npm run devnpm test builds the TypeScript project, starts the stdio MCP server in an isolated temporary data directory, simulates a browser submission over HTTP, and verifies ask_user, open_dashboard, and get_updates.
Release Automation
This repository includes:
.github/workflows/ci.yml: build and test on Node.js 20 and 22..github/workflows/publish.yml: validate and publish to npm with provenance on GitHub Release or manual dispatch.
For the first publish, the package name must be owned on npm. Because a package does not have npm package settings until it exists, use one of these paths:
Run the
Publishworkflow with a GitHub Actions secret namedNPM_TOKENthat contains an npm automation token.Or publish once from an authenticated local machine with
npm publish --access public, then configure trusted publishing for later releases.
After the package exists, preferred npm setup is trusted publishing:
Publish the GitHub repository.
In npm, open the
askboard-mcppackage settings.Add a trusted publisher for
qinsehm1128/askboard-mcp.Set workflow file to
.github/workflows/publish.yml.Set environment name to
npm.Create a GitHub Release or run the
Publishworkflow manually.
If trusted publishing is not available for the account, keep using the NPM_TOKEN secret.
Storage and Privacy
Askboard stores history as local plaintext JSON. Do not collect secrets or sensitive production data unless the local machine and data directory are appropriate for that use.
Project Structure
src/
index.ts MCP server and tool registration
webserver.ts Local HTTP server, forms, dashboard, submission handlers
storage.ts JSON persistence and revision tracking
browser.ts Cross-platform browser opener
types.ts Shared data model
lib/
styles.ts Shared CSS
templates.ts Form and dashboard HTMLAvailable Tools
3 toolsask_userAsk the user via a web formA
Show the user an interactive web form (opens in their browser) to collect answers, instead of asking one question at a time in chat. Pass a list of questions; each can be single-choice, multi-choice, or free text, and can allow a custom write-in. The call blocks until the user submits, then returns their structured answers. Use this whenever you have a task list, a review checklist, or several questions for the user to decide on at once.
| Name | Required | Description | Default |
|---|---|---|---|
| intro | No | Short paragraph explaining the request | |
| title | No | Heading shown at the top of the form | |
| fields | Yes | The questions to ask |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the call blocks until the user submits, returns structured answers, opens in a browser, and supports various question types with an optional custom write-in. This provides comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, front-loaded with the primary purpose, and every sentence adds meaningful information. There is no redundancy or fluff, and it is well-structured with the usage tip at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema fully documents parameters and the description covers when to use the tool, its blocking behavior, and return type, it is complete for this interactive form tool. No output schema is needed to understand what is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds some context about form behavior and 'structured answers' but does not significantly deepen parameter-level meaning beyond what the schema provides. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows an interactive web form to collect answers, contrasting with asking in chat. It specifies the resource (form) and action (ask/collect), and differentiates from siblings (open_dashboard, get_updates) which are unrelated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this whenever you have a task list, a review checklist, or several questions for the user to decide on at once.' It also notes when not to use it ('instead of asking one question at a time in chat'), giving a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_updatesRead only what changed (incremental)A
Incrementally read history. Pass the sinceRevision you last saw, and this returns only sessions changed after it (new submissions or dashboard edits), plus the current revision to pass next time. Call with sinceRevision=0 (or omit) to get everything the first time. Use this instead of re-reading the whole history so you only pull deltas — e.g. to pick up answers the user edited after the fact.
| Name | Required | Description | Default |
|---|---|---|---|
| sinceRevision | No | Highest revision you've already processed. Omit or 0 to read all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description explains the behavior in detail: it returns changed sessions and the current revision to pass next time, and it clarifies the meaning of sinceRevision=0/omitted. This fully discloses the incremental semantics and the stateless pagination mechanism, leaving no hidden surprises.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence contributes: it explains the method, the response, the initial call, and the use case. No filler or repetitive content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description fully covers the necessary context: how to call, what to expect, and why to use it. It leaves no significant gaps for the agent to guess about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'sinceRevision' parameter completely (100% coverage). The description adds value by explaining the pattern of passing the last seen revision and the response format, which goes beyond the schema's basic definition. This is a solid enhancement without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: incrementally read history, returning only sessions changed after a given revision. It uses a specific verb-resource combination and distinguishes itself from the sibling tools (ask_user, open_dashboard) by its focus on delta reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this instead of re-reading the whole history so you only pull deltas — e.g. to pick up answers the user edited after the fact.' This clearly indicates the intended use case and the advantage over full-history reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_dashboardOpen the history dashboardA
Open the local dashboard in the user's browser, where they can review every form that was shown before, what they submitted, and which choices they made.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states the tool opens a local dashboard and explains the content users can review, but it does not mention side effects, whether it blocks, or any limitations. The description is clear but lacks deeper behavioral context such as browser launch behavior or potential delays.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action and the value to the user. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description sufficiently covers what the tool does and what the user gains. However, it lacks any mention of when to use it relative to siblings, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty. The description adds no parameter information, but none is needed. This aligns with the baseline for 0-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Open the local dashboard in the user's browser') and the specific resource (dashboard of form history), which distinguishes it from sibling tools like ask_user and get_updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or contexts. It only describes what the tool does, leaving the agent to infer usage without explicit cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: ask_user collects answers via forms, open_dashboard presents a visual history, and get_updates provides programmatic incremental access to changes. No overlap or ambiguity exists between them.
All three tools follow a consistent verb_noun pattern with lowercase and underscores: ask_user, open_dashboard, get_updates. The naming is uniform and predictable.
Three tools is well-scoped for the server's purpose: asking questions, reviewing via dashboard, and syncing updates. Each earns its place without unnecessary bloat or missing essentials.
The tool set covers the full lifecycle of an askboard session: collecting responses via forms, reviewing all past submissions in the dashboard, and tracking edits through incremental updates. There are no obvious dead ends or missing core operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for US nursing facility search and ownership lookup (NursingHomeDatabase).
An MCP server that automatically collects feedback on your MCP server.
MCP server for the Inistate platform: module discovery, entry management, and activity submission.
Hosted MCP server for finding authoritative primary data sources and official portals.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA local MCP server for journaling, organizing, and recalling your work. It captures entries as plain markdown files, indexes them for full-text and structured search, and enables querying via natural language.1MIT
- FlicenseAqualityCmaintenanceA local MCP server that captures coding context, tracks developer sessions, and powers daily insights.8
- AlicenseAqualityCmaintenanceA local, open-source MCP server that provides deterministic organizational tools for structured decisions, guided reflection, action planning, and transparent digital report outlines without requiring an API key.648MIT
- FlicenseNot gradedqualityBmaintenanceThis MCP server enables human-in-the-loop semantic labeling by creating self-contained HTML forms for ambiguous data and securely retrieving labeled results.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/qinsehm1128/askboard-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server