IndirectTek MCP server
io.github.IndirectTek/mcp-server·v0.15.1Elixium AI — XP-native agile platform. TDD-gated stories, team decisions, learning loop.
129 downloads/wk
Reviews
Write oneNobody has reviewed IndirectTek yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
IndirectTek tools (47, 13 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
add_blockerDeclare a structural dependency: storyId is blocked by blockerStoryId, for the given reason. Adds one entry to the dependent story's blocked_by array. Idempotent on blockerStoryId — duplicate calls are safe. Emits a story.blocker_added audit row carrying identity, timestamp, and the reason. Use this when grooming surfaces a dependency (e.g., B.6.2 cannot ship until 2B.1's canonical stage identifie
approve_testsApprove a proposed test plan so implementation can proceed. Transitions workflow from tests_proposed to tests_approved. This is the human approval gate in the TDD workflow.
create_boardwrite actionCreate a new board in the workspace. Auto-generates slug from name if not provided. Free and trial workspaces are limited to 3 active boards; paid plans have unlimited boards.
create_epicwrite actionCreate an epic for the active board. Epics group related stories around an outcome hypothesis. Before creating, ensure you are grounded — call `get_board_context` to surface existing epics, workspace objectives, and recent decisions; duplicate or overlapping epics are easy to introduce without that context. Epics are attributed to the user bound to your API key. Use `update_epic` to revise an exis
create_hypothesiswrite actionCreate a new assumption/hypothesis in the Icebox for validation. Before creating, ensure you are grounded — call `get_board_context` to check for existing related hypotheses and recent decisions in this area. The hypothesis is attributed to the user bound to your API key.
create_storywrite actionCreate a story on the active board. New stories enter the Backlog lane and are attributed to the user bound to your API key. Stories you create without current board context risk duplicating in-flight work or contradicting recent decisions. Ensure you are grounded before writing — if you haven't grounded this session, call `get_board_context` (optionally with `intent` set to the user's request for
delete_proposalwrite actionDiscard a proposal you created. If the proposal was endorsed and mutated a story field, the field is reverted to its previous value from the snapshot. Emits a proposal.deleted audit event. Callable only by the proposer — you cannot discard someone else's proposals. NOTE: Proposals endorsed before the snapshot-capture infrastructure shipped (story 417118e8) return an informative 409 error explainin
draft_design_contextDraft a dev-facing "design context" for a story — a short reading of the attached design and what it means for the developer who will implement it (Summary / how it maps to the acceptance criteria / open questions). Records a PROPOSAL a human endorses; it does NOT change the story until endorsed, and never rewrites the acceptance criteria. Text-only: it works from the design link + story + AC, NOT
draft_hypothesisGenerate an AI-drafted hypothesis for the given story and submit it as a pending proposal. The backend calls the configured AI_PROVIDER, drafts the hypothesis text, and creates a proposal that a human must endorse via `endorse_proposal` before the story's hypothesis field is updated. The draft does not change the story until endorsed.
draft_test_planReturn a starter test plan scaffold seeded from the story's hidden_unknowns and hypothesis. The agent edits this scaffold and calls propose_test_plan with the final version. Makes Icebox premortem assumptions load-bearing at test authoring time.
endorse_proposalEndorse a pending field proposal. Updates the underlying story field with the proposal's draft_value and emits a proposal.endorsed audit event. Only humans should endorse — the agent should never call this on its own draft.
estimate_costGenerate AI-assisted infrastructure cost estimate for a story. Uses live cloud pricing data when available.
get_epic_cost_rollupGet aggregated infrastructure cost for all stories in an epic. Shows total monthly cost, category breakdown, and estimation coverage.
get_feature_configGet the feature configuration for this board/workspace. Returns enabled features, team profile, and smart defaults context.
get_infrastructure_profileGet the workspace infrastructure profile. Returns cloud provider, regions, compliance frameworks, existing services, and constraints. Use this to understand the team's environment before making infrastructure recommendations.
get_iteration_contextGet the current iteration context (Current + Backlog) for AI planning. Each story carries a derived `reviewStatus` (awaiting_review | accepted | changes_requested | in_progress | unstarted) so you can filter "which of mine are awaiting review?" from one field instead of decoding the (state, workflow_stage) tuple — it respects the workspace's workflow model (3-state vs 4-state). The response also i
get_stakeholdersDerive the set of trust audiences this story needs to earn trust with. Returns an array of {audience, reason} entries based on the story's risk_profile, its linked epic's hypothesis/successMetrics, and the workspace's compliance frameworks. Pure derivation — no mutations, no AI calls.
get_storyGet a single story in the lean camelCase shape (heavy text — description, acceptance criteria, test plan, hypothesis, hidden unknowns — omitted by default; opt back in via include, e.g. include:["description","acceptanceCriteria"] to read the full story text). Accepts the full UUID, the readable ID you see on cards/links (e.g. INDTEK-494), or an unambiguous UUID prefix (e.g. the 8-char short hash)
get_test_planRetrieve and display the full TDD test plan for a story. Shows the plan text, workflow stage, approval status, and test file paths.
get_trust_leakageReturn the tenant's off-system decision report: commits authored since `since` on the workspace's configured Git provider (GitHub, GitHub Enterprise, GitLab, or Gitea) whose messages do NOT reference any story on the board. Nudge signal, not a gate. Requires workspace_git_provider to be configured via POST /workspace/git-provider first.
get_usage_reportWorkspace token-usage rollup by story, epic, board, or model — the same report the team sees. Check what your context reads cost; if a tool you call often tops the list, prefer leaner reads.
list_boardsList all boards in the workspace. Returns id, name, slug, and story count for each board. Marks the currently selected board.
list_decisionsList recent team decisions. Filter by category, tag, or date. Use this to check what the team has decided recently.
list_epicsList epics for the current board in the lean camelCase shape (description/hypothesis/successMetrics omitted by default — opt back in via include, or pass view:"summary" for id/title/stage/outcomeStatus only). Returns { total, showing, epics } so a limit never truncates silently.
list_knowledge_sourcesList all knowledge sources indexed in the RAG knowledge base, grouped by source type.
list_objectivesList objectives for the current workspace
list_storiesList stories on the Elixium board. Returns compact summaries (id, title, lane, points, owners, epic, state). Use lane filter to reduce results. Defaults to 25 stories max.
prepare_implementationFetch all context for a story and format an implementation brief
prioritize_epicAI-powered dependency analysis and story prioritization for an epic. Analyzes stories, proposes optimal execution order based on dependencies, and optionally applies the reorder. Uses the same server-side endpoint as the UI.
propose_designContribute a design link to a story as a designer agent (e.g. Claude Design, Stitch+Gemini). Records a PROPOSAL attributed to you + the named design tool; a human with design authority endorses it to accept the design (the agent-proposes / human-endorses trust chain — your link doesn't change the story until a human endorses). Pass designTool so the card shows which design tool produced it. Use th
propose_field_draftwrite actionSubmit an AI-drafted value for a Learning Loop field as a pending proposal. The draft does NOT change the story until a human endorses via endorse_proposal. Caller should disclose `provider` (LLM model) and `agent` (client+version) for trust attribution. Stories whose fields you propose without current board context risk contradicting recent decisions in this area. Ensure you are grounded before d
propose_test_planwrite actionSubmit a test plan for human review. Sets workflow_stage to tests_proposed. Implementation is BLOCKED until human approves. Before proposing, call `get_story` to inspect the story's hypothesis, hidden_unknowns, and risk_profile (the test plan should ground in those fields). Use `draft_test_plan` first for a scaffold seeded from the story's premortem assumptions.
record_decisionRecord a team decision, meeting outcome, or architectural choice. These are shared across all team members' AI sessions. Before recording, ensure you are grounded — call `get_board_context` to check whether a recent decision already covers this area; duplicate or contradictory decisions are exactly what this tool exists to prevent.
record_learningRecord a learning outcome for a completed story (sets the story's outcome_summary field). The learning is visible in the workspace's recent-learnings surface. Before recording, call `get_story` to inspect the story's current state, and `get_board_context` to surface recently-recorded learnings on related stories that may already capture the same insight.
reject_proposalReject a pending field proposal with a required reason. Story field is unchanged; reason is captured for agent learning + audit.
remove_blockerwrite actionRemove a previously-declared dependency: drop blockerStoryId from storyId's blocked_by array. Idempotent — succeeds even if the blocker isn't present (no audit row in that case). When a state transition actually occurs, emits a story.blocker_removed audit row.
request_inputBlock a story on a specific PERSON's answer — a first-class human blocker (not a title-prefix hack). Attaches an open clarification { question, audience } to the story; the audience must be a member of this workspace. Emits a story.input_requested audit event (attributed: agent identity + the authorizing user). Use this when you need a human decision/answer to proceed — the person is notified with
resolve_inputAnswer the open clarification on a story (the counterpart to request_input). Records the answer + answeredAt + answerer and flips the awaiting_input status to 'answered'; emits a story.input_provided audit event. Does NOT move the lane — an answer isn't always an unblock ("no, do X" changes the work), so resuming stays a human/agent decision.
review_prwrite actionRun AI review on a story's PR diff against acceptance criteria and DoD. Fetches diff, runs AI validation, posts findings as GitHub PR comment, and stores results on the story.
search_decisionsFull-text search across all team decisions. Use this when looking for decisions related to a specific topic or keyword.
search_knowledgeSemantic search across team knowledge base (documents, wikis, runbooks, attached files). Returns relevant chunks with source attribution. Pass storyId to scope to one story's attached files — curated context beats ambient workspace results. Falls back to full-text (with a visible degraded marker) when the deployment has no embedding provider.
select_boardSwitch the active board context. All subsequent tool calls (list_stories, create_story, list_epics, etc.) will operate against the selected board. Overrides ELIXIUM_BOARD_SLUG env var for this session.
start_storyStart TDD workflow for a story. By default creates a feature branch. Set trunkBased=true to work directly on main (recommended for small changes). Set autoMerge=true with trunkBased for short-lived branches that auto-merge on submit.
submit_for_reviewwrite actionSubmit implementation for human review. Only works if tests are approved. Sets state to finished.
update_epicwrite actionUpdate an epic's title, description, stage, or outcome fields (hypothesis, success metrics, outcome status, target date). Before updating, ensure you are grounded — call `get_board_context` for current board state and recent decisions that may affect this epic. Updates are attributed to the user bound to your API key.
update_storywrite actionUpdate fields on an existing story. Accepts Learning Loop fields (hypothesis, confidence_score, hidden_unknowns, risk_profile) and storyType in addition to the basics. Before updating, call `get_story` to inspect current state, and `get_board_context` if your update relates to a topic that may be governed by a recent team decision. Updates are attributed to the user bound to your API key.
update_three_amigos_checkwrite actionAttest engineering/design/product readiness for the story; each role is its own write target with its own audit record. Use when a Three-Amigos DoR check is being completed (or rescinded) during grooming. The per-role design means concurrent attestations on different roles don't race — each call is a single atomic jsonb_set write at the row level. Every call emits a three_amigos.attested audit_log
Public scan report
scanner v0.1.9 · 2026-09-25 · same rubric, same numbers if you re-run it
- Code scan24 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenanceno repository listed3/15
- Maintainer identityno repository or website to verify2/10
Findings (1)
- lowNo source repository listed
maint.no-repo
How IndirectTek compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 55/100
- higher than 10% of 48,255 servers
- Tools
- 47
- the typical server has 7
- Tools that change things
- 28%
- typical: 0%. Fewer write tools means less an agent can break
- Downloads a week
- 129
- more than 68% of 12,191 servers with a package
What its tools let an agent do: 31 read · 5 create · 8 change · 2 delete · 1 run or deploy
Install IndirectTek in Claude Code, Cursor or VS Code
Runs npx -y @elixium.ai/mcp-server on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add mcp-server -- npx -y @elixium.ai/mcp-server
IndirectTek: common questions
- Is IndirectTek MCP server safe?
- With care: it is graded C, so read the findings first (55/100). Read the IndirectTek safety report
- How do I install IndirectTek?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does IndirectTek need an API key?
- Yes. The registry entry asks for
ELIXIUM_API_KEY. - Is IndirectTek maintained?
- The latest release is v0.15.1.
- How does IndirectTek compare with other MCP servers?
- safety score 55/100 (higher than 10% of 48,255 servers); tools 47 (the typical server has 7); tools that change things 28% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.