Skip to main content
Glama
valentil

FeatureBoard MCP Server

by valentil

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FEATUREBOARD_DATA_DIRNoPath to the folder containing project boards. If not set, the user will be prompted on first run.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_projectsA

List all boards (projects) under the configured boards folder.

get_boardA

Return the FeatureBoard board UI as a self-contained HTML document, ready to render as a Cowork artifact. This is THE way to satisfy any natural-language request to see the board — "open/show the board", "show the featureboard", "what's on my plate", "how are we looking", "give me a status", "show velocity/analytics". Do NOT hand-write your own board: take the returned html, write it to a file, and pass it to create_artifact (use artifact id "featureboard-board"; if a board artifact is already open, reuse it via update_artifact instead of creating a duplicate). List this server's tools in the artifact's mcp_tools so the columns, product filter, and analytics dashboard work.

create_projectA

Create a new board folder with empty featurelist.md and buglist.md. Returns the derived ticket prefix.

list_tasksA

List features and/or bugs on a board, most-recent first. Filter by type, status, product, label, or search. Returns a compact one-line-per-ticket view by default and is paginated (limit/offset) so large boards don't blow the context budget — set compact:false for full details, and raise limit or page with offset to see more. Use get_metrics for a pure overview.

get_taskA

Get the full details of a single task by its ticket ID (e.g. FBF-12).

add_featureB

Add a feature to a board's featurelist.md. Returns the new ticket (FBF-###).

log_bugA

Log a bug to a board's buglist.md. Returns the new ticket (FBB-###).

add_features_bulkA

Add several features at once. Use this after brainstorming: you generate the ideas, this persists them. Returns the created tickets.

import_tasksA

Import a backlog from raw text into a board. Accepts a markdown checklist (- [ ] Title: desc), CSV (with a header row: title, description, product, priority, type, due, labels, status), or a JSON array/object ({features:[…], bugs:[…]} or a flat array). Format is auto-detected. Set dryRun to preview the parsed tasks without writing them.

plan_workA

Turn a user request into board items in one step. Optionally creates the project, then adds the features and bugs you list. Use this as the FIRST step when starting a substantive request, then work the tickets one at a time. Returns all created tickets.

next_taskA

Return the next open ticket to work (status Todo or In Progress), so you can pull work one item at a time. Prefers In Progress, then earliest due date, then oldest ticket. Returns null when the board is clear.

update_taskA

Update fields on an existing task. Only provided fields change.

set_statusA

Move a task between Todo / In Progress / Done. When moving to Done you can also record structured completion metadata (model, tokens, additions, deletions) — these are written to the work log and roll up into velocity/metrics.

decompose_featureA

Replace one feature with a set of linked subtasks. You provide the subtasks; this creates them (each linked to the parent) and deletes the parent. Returns the new tickets.

link_tasksA

Set the linked issue on a task (e.g. link a bug to the feature it affects).

add_attachmentB

Attach a file path or URL to a ticket (stored as [Attachments: ...] on the ticket line). Idempotent: attaching the same item twice is a no-op.

remove_attachmentB

Detach a previously attached file path or URL from a ticket.

delete_taskB

Permanently remove a task from its board.

scan_board_cleanupA

Read-only deep-clean scan: finds likely-duplicate tickets (grouped by title similarity, each group nominating a keeper + removal candidates) and stale/placeholder tickets (old Todo items, placeholder titles). Returns a suggested removal set to feed prune_board. Never deletes.

scan_test_cleanupA

Read-only deep-clean of the project's test/ dir: finds byte-identical duplicate test files, stale files whose filename ticket id is no longer on the board, and empty stub files (only TODO placeholder assertions). Returns a suggested removal set. Never deletes — companion to scan_board_cleanup.

prune_boardA

Guarded cleanup: deletes ONLY the ticket ids you pass, and only when confirm is true (otherwise returns a dry-run preview of what would be deleted). Non-existent ids are reported, not fatal. Pair with scan_board_cleanup's suggestedRemovals.

list_code_filesA

List files and folders under the project's codeLocation (optionally a subpath), with sizes and extensions. Skips vendor/build dirs (node_modules, .git, dist, …). depth controls how many levels to expand. Sandboxed to codeLocation.

read_code_fileA

Read a file under the project's codeLocation as UTF-8 text (size-capped; binary files are flagged, not dumped). Returns content + line count. Sandboxed to codeLocation (no path escape).

code_file_mapA

Recursively map the project's codeLocation: total file count + bytes, counts by extension, and the files that exceed the split thresholds (lines/bytes) as split candidates (worst first) — useful for spotting oversized modules to decompose.

get_metricsA

Read-only snapshot: feature/bug counts by status, completions by date, and velocity from the work log (tokens, additions/deletions, active days, recent tokens).

predict_due_datesA

Estimate when open work will complete by dividing the backlog by the board's observed throughput (tickets closed per active day). Walks the priority-ordered queue to give each open ticket a projected completion date, suggests a due date for tickets that don't have one, and flags tickets whose existing due date is likely to slip. Read-only — apply a suggestion with update_task if you want it stuck.

get_project_configA

Read a board's settings: products, code location, agent model, prefixes, website, description. Merges MCP-managed config over the legacy project_config.json.

set_project_configA

Update a board's settings (only provided fields change). Writes to the MCP-managed config; never mutates legacy project_config.json.

set_brandingA

Set the project's brand kit in one place — name, tagline, brand words, voice/tone, primary & accent colors, logo, and font — so every generated asset (media, website, campaigns) stays consistent. Stored on the board config; retrieve it with get_branding. By default also applies colors/font to the project website if one exists.

get_brandingA

Return the project's brand kit — name, tagline, words, voice, colors, logo, font — plus a ready-to-inject generation instruction, a CSS :root cssVars snippet for web, and which fields are still missing. Call this before generating any branded asset to stay consistent.

add_productA

Add a product to a board's product list (used for tagging tickets via [Product: …]).

remove_productA

Remove a product from a board's product list (existing ticket tags are left as-is).

get_scratchpadA

Read a board's freeform scratchpad.md - a per-project notes surface for context, decisions, and reminders that Claude and the board share. Returns the raw markdown.

set_scratchpadA

Overwrite a board's scratchpad.md with new content. Use append_scratchpad to add a note without replacing existing content.

append_scratchpadA

Append a line or block to a board's scratchpad.md, preserving existing notes. Mention a ticket id (e.g. FBF-12) to have it surface in that ticket's work packet.

drift_startA

Begin a drift-evaluation run over a board's Done tickets. mode 'sample' evaluates a seeded random subset (fast statistical estimate); mode 'full' evaluates every Done ticket. Returns a runId + the tickets to score. Then, for each ticket, compare its scope/description/DoD + work log against the actual code it touched (use get_work_packet and the project's codeLocation) and call drift_record with a 0–100 fidelity score; finish with drift_report. Use the evaluate_drift prompt to run the whole loop.

drift_recordA

Record a 0–100 fidelity score for one ticket in a drift run (verdict is derived: >=80 aligned, 50–79 partial, <50 drift — or pass your own). Provide a short gap explaining any shortfall, and optionally the files you checked. Upserts by ticket.

drift_reportA

Aggregate a drift run: per-ticket scores, mean fidelity, verdict counts, drift rate, and — for sampling — a 95% Wilson confidence interval on the true drift fraction extrapolated to the whole Done population. Lists the flagged (partial/drift) tickets worst-first with their gaps, and any pending (unscored) tickets.

drift_remediateA

One-click remediation across a run's flagged tickets: action 'file_bugs' files a linked, drift-labeled bug per gap; 'reopen' moves them back to Todo; 'relabel' adds a 'drift' label. verdicts selects the bands to act on (default ['drift']). Pass dryRun:true to preview. Records what it did on the run.

log_workB

Append a work event to the board's work log: a summary plus optional tokens, additions/deletions, and model, tied to a ticket. Feeds velocity and health.

get_work_logB

Read work-log entries, most-recent first. Optionally filter to one ticket. Returns entries plus a velocity rollup.

get_agent_monitorA

Snapshot of the board's currently-running work: every In Progress ticket with its latest work-log activity, cumulative additions/deletions/tokens, idle time since last activity, and a stalled flag (In Progress but no recent progress). Sorted most-recently-active first. Use it to see what's underway and catch stuck tickets.

get_healthA

Composite 0-100 health score with grade and breakdown: bug pressure, feature progress, momentum (recent tokens), and freshness (staleness of open work).

get_work_packetA

Assemble a focused brief for one ticket before you work it: scope, linked-issue details, code location + custom project prompt, scratchpad mentions, the ticket's recent work log, files to read, and a definition of done. Read the files it points to rather than dumping them.

suggest_test_stubA

Generate a boilerplate test file (path + node:test content) for a ticket, derived from its title/description and the board's code location. Agent-native 'fixtest': call it when creating or starting a ticket, then write the returned file. Read-only — it returns the stub, it does not create the file.

generate_testA

Generate a FULL node:test file (path + content) from a prompt and/or a ticket — one test() block per described behaviour, not just the single boilerplate stub. Optionally imports a target module. Read-only: returns the file for you to write under test/.

bug_impact_scanA

Given a bug (by ticket, or an ad-hoc title/description), rank the existing features most likely affected, by keyword overlap and shared product. Use it when logging a bug to spot regressions and linkage candidates.

log_test_runA

Record a test run's result (passed/failed/skipped, optional suite + ticket + summary) to the board's test_runs.md. You run the tests (e.g. via the shell); this stores the report so the board can surface pass/fail over time.

get_test_runsA

Read recorded test runs (most-recent first) plus a summary: total runs, latest result, and whether the latest is passing.

save_test_pageB

Create/overwrite a standalone HTML test/QA page under the project's test-pages/ folder.

list_test_pagesB

List the standalone HTML test pages under test-pages/.

get_test_pageB

Read one test page's HTML by name.

remove_test_pageC

Delete a test page by name.

test_runs_by_suiteA

Organize recorded test runs (from log_test_run) by suite: each suite's latest result, run count, cumulative pass/fail, and pass-rate, plus the list of currently-failing suites. Surfaces coverage/health per suite instead of a flat list.

coverage_by_productB

Roll up, per product, how many of its tickets have at least one recorded test run vs none, so testing gaps are visible on the board. Includes an overall rollup and the untested tickets per product.

get_regressionsA

Regression view: bugs grouped under the feature they're linked to (sorted by open-bug count), plus unlinked bugs. Surfaces which shipped features are at risk. Link bugs to features (link_tasks) to populate it.

list_mediaA

List a project's media gallery: images and shareable HTML reports in its media/ folder. Each asset carries enough to render a visual grid — kind, mimeType, sizeBytes + sizeLabel + sizeBucket, image dimensions (width/height, parsed from file headers), a preview reference (inline text snippet for reports, a get_media src for images), plus sidecar metadata (title, tags, brandWords, linked ticket). Read-only; returns an empty gallery if the project has no media/ folder yet. Optionally filter by kind.

save_mediaA

Save a generated asset into a project's media/ folder — a shareable HTML report (or SVG) as UTF-8 text, or an image as base64 (encoding:'base64'). You generate the content; this persists the bytes plus a .meta.json sidecar (title, prompt, tags, linked ticket, generatedAt) that list_media reads back. Name must be a plain filename with an extension, e.g. q3-report.html.

list_variationsA

List the gallery assets that share a variation group id (alternatives generated from one prompt), for side-by-side review.

get_mediaA

View one media asset: its metadata, size, and (by default) content — UTF-8 for text/report assets, base64 for images — plus its revision history (prior versions with the prompts used). Pass a version id to view an archived revision instead of the current one; set withContent:false for metadata + history only.

revert_mediaA

Restore a prior version of an asset as the current one. The current copy is archived first, so the revert is itself undoable. Use get_media to find the version id.

tag_mediaA

Add and/or remove custom tags on a media asset (updates the sidecar only — the asset bytes and version history are untouched). Tags are de-duplicated. Returns the asset's new tag list.

annotate_mediaA

Add a pin-based comment/annotation to an asset. Optional x/y locate the pin (e.g. 0-1 relative coordinates on an image or report). Returns the new annotation (with a stable id) and the total count.

remove_annotationA

Remove an annotation from an asset by its id (from get_media). Returns the remaining count.

add_media_commentA

Add a threaded comment to a gallery asset (a discussion thread, distinct from pin annotations). Pass parentId (a comment id from get_media / list_media_comments) to reply to an existing comment. Returns the new comment and total count.

list_media_commentsB

List an asset's comments, both as a flat array and as a threaded tree (root comments with nested replies).

remove_media_commentA

Remove a comment by id (from get_media / list_media_comments). By default its reply subtree is removed too; set cascade:false to refuse when it still has replies. Returns the ids removed.

search_mediaA

Search/filter a project's media gallery by kind, by exact tag, and/or a free-text query matched across asset name, title, tags, and the generation prompt. Returns matching assets with metadata.

upload_referenceA

Save a reference/source image under media/uploads/ (base64) to use as input for media generation — kept separate from the gallery. Reference it in a generate/refine prompt so Claude or an image model can work from it.

list_referencesB

List the reference/source images under media/uploads/ (inputs for generation).

edit_mediaA

Directly edit an existing text/report asset (find/replace, append, or prepend) and save the result as a new version — the prior copy is archived (edit-media). For images, use refine_media or image generation instead.

draft_shareA

Save a reviewable social-share draft for a gallery item — you write the copy, this persists it (never posts). Platform 'x' (≤280 chars) or 'linkedin' (longer); over-limit copy is rejected. There is no live-publish connector: drafts are for the user to review and post. Use list_shares to review.

list_sharesA

List saved share drafts (newest-first), optionally filtered by asset and/or platform.

remove_shareA

Delete a share draft by its id (from list_shares).

add_companyA

Create a company in the project's CRM (crm/companies/.json). Slug is derived from the name and de-duplicated. Returns the new company record.

list_companiesA

List the project's CRM companies (id, name, domain, contact count, products), alphabetical by name. Pass product to show only companies associated with that product.

set_company_productsA

Record which products a company uses/owns (replaces the list; de-duplicated). Surfaced on the company record and usable via list_companies(product=...).

get_companyA

Full company record including its contacts. Throws if the company id isn't found.

add_contactB

Add a contact (name, email, role, phone) to a company. Contact ids are unique within the company.

update_contactA

Edit a contact on a company (only provided fields change). Pass an empty string to clear email/role/phone.

remove_contactA

Remove a contact from a company by its contact id (e.g. c1).

add_crm_messageA

Add an incoming message to the CRM inbox (starts pending review). Useful for logging inbound emails/leads that need triage and approval.

submit_crm_intakeA

Capture an inbound support or contact submission (support-info / crm-submit) into the CRM inbox, pending review. Records the requester (name/email), a category (support/sales/contact/feedback/other), an optional related company, and the message; synthesizes a subject if none is given.

list_crm_inboxA

List CRM inbox messages (newest-first), optionally filtered by status (pending/approved/rejected), company, and/or type (support/sales/contact/feedback/other).

review_crm_messageB

Approve or reject a pending CRM inbox message by id. Records the decision and timestamp.

add_leadA

Add a sales lead to the project's leads store (crm/leads.json). Status defaults to 'new' (pipeline: new → contacted → qualified → won/lost). Optional value and lat/lng power the pipeline value and the leads map.

list_leadsA

List leads (newest-first), optionally filtered by pipeline status and/or company.

set_lead_statusB

Move a lead along the pipeline (new/contacted/qualified/won/lost). Records the update time.

enrich_leadA

Record website-sourced details on a lead (only provided fields are set): website, domain, phone, industry, description, contactName, employees, email, city, source, value. Use the pull_lead_website prompt to fetch + extract these from the lead's site first, then persist them here.

convert_leadA

Convert a qualified lead into a CRM company, carrying over its fields (name, website→domain, a notes summary) and optionally seeding a contact from the lead's person/email/phone. Marks the lead won and records the company it became. Errors if already converted.

leads_mapB

Geographic + pipeline rollup for the leads map: mappable points (leads with lat/lng), counts by status and by city, geocoded/ungeocoded tally, and total pipeline value. Rendering is left to the board or a generated report.

add_lead_areaA

Define a circular geographic area (name + centre lat/lng + radius km) for the leads map. leads_map then tags each mapped lead with the areas it falls in and rolls up lead counts + pipeline value per area.

list_lead_areasA

List the defined geographic lead areas (id, name, centre, radius).

add_lead_interactionA

Append a touchpoint to a lead's interaction log: kind (call/email/meeting/note/visit/other) + a note, timestamped. Builds the per-lead history.

update_lead_locationA

Set a lead's coordinates (lat/lng) and/or city, so it maps correctly and falls into the right areas.

customer_portalA

Build a per-customer portal page for a CRM company: their contacts plus the board tickets linked to them (link tickets with link_customer_ticket). Returns self-contained HTML; with save:true it also writes the page into the media gallery as portal-.html and returns its path.

list_contract_templatesA

List the standard contract templates (NDA, MSA, SOW, commercial license) with their required fields.

generate_contractB

Fill a standard contract template with the given fields and return the draft markdown. Optionally auto-fills customer_name from a CRM company, and with save:true writes the draft into the media gallery. Drafts are stamped to review with counsel — not legal advice.

link_customer_ticketA

Link a board ticket (feature/bug) to a CRM company, stored on the company so it shows in its customer_portal. De-duplicated.

unlink_customer_ticketC

Remove a ticket link from a CRM company.

Prompts

Interactive templates invoked by user choice

NameDescription
evaluate_driftRun a full agentic-drift evaluation: sample (or fully check) Done tickets, score how faithfully each was implemented vs its intent, report an aggregate drift rate with confidence, and offer one-click remediation.
pull_lead_websiteFetch a lead's website, extract company details, and save them onto the lead via enrich_lead.
project_from_chatAnalyze the current conversation and create a FeatureBoard project from it — a project name plus features (new work) and bugs (issues raised).
process_nextPull the top ticket off the board's priority queue and work it end-to-end with the FeatureBoard work-packet loop.
generate_mediaGenerate a shareable web report (or image) for a goal and save it into the project's media/ gallery via save_media.
generate_imageProduce an actual raster image (via an image-generation tool/connector, if one is available) and save it to the project's media/ gallery as base64 — falling back to a self-contained SVG when no image generator is connected.
generate_variationsProduce several alternative versions of an asset from one prompt/goal, saved as a group for side-by-side review.
refine_mediaIterate on an existing gallery asset with a follow-up instruction, saving the result as a new version (its history is preserved).
share_mediaDraft suggested X and LinkedIn copy for a gallery item and save them as reviewable drafts (does not post).
generate_siteFrom a single description, generate a complete site (title, tagline, theme, home sections, and initial sub-pages) and scaffold it in one shot with scaffold_site, instead of building it field-by-field.
tweak_siteApply a plain-English change to the project's website (e.g. 'make the tagline punchier', 'add a pricing section', 'switch to dark mode') and re-render.
run_testsRun the project's test suite(s), record each result with log_test_run, then show the consolidated per-suite view.
brandEstablish the project's brand kit once, then apply it consistently across media, website, and campaigns.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/valentil/featureboard-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server