Atlas / MCP servers / max-listov / stitchkit

stitchkitBLOCK

mcp/max-listov/stitchkit

Contract-first backend framework for Bun and Node — one defineContract() into an HTTP API, MCP tools, AI-agent tools and a typed client.

Verdict
BLOCK
Grade
F
Trust score
42 /100
Exposed tools
167 130r · 36w · 1d
Transport
streamable-http
License
MIT
Stars
3
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Contract-first backend framework for Bun and Node. Define your API once — get an HTTP API, MCP tools, AI-agent tools, a CLI and a typed client.

= 22" />

One defineContract() → an HTTP API, MCP tools, AI-agent tools and a CLI on the server — plus a fully-typed client to call them.

Why

  • One contract, five surfaces. Define your API once — get HTTP routes, MCP tools (for Claude/Cursor), AI SDK tools (for agents), a CLI (for scripts & Skills), and a typed client.
  • Zero HTTP framework deps. Built on Bun.serve() (Bun) or srvx (Node). No Hono, no Elysia, no Express.
  • Fullstack type safety. Server handlers, client calls, MCP tools — all typed from the same contract.
  • Inspectable. A focused core with explicit adapters. No generated

application code or framework build step in your app.

  • Thin over what you already use. WebSocket = Socket.IO (createSocketIOClient / createSocketIOServer). React data layer = react-query-kit (`createCurs
Read from source at commit 9f710db052ddOBSERVED · 2026-10-12
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add stitchkit-tui -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "stitchkit-tui": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (167)

130 read · 36 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
admin_actionreadAdmin action
agent_inlinereadInline Agent registration
alternatereadAlternatives
auditreadAudit and report by exit code
blockedreadNever allowed
brokenreadCarries a pointer nothing can resolve
broken_previewreadPresenter failure fixture
broken_roundreadRound resolver failure fixture
business_resultreadReturn business data
change_itemreadChange an item
chattyreadReturns a result and logs on the way
checkreadMeasure native idle and framework deadline boundaries
classifiedreadClassify a valid result
cleardestructiveStart clean while keeping this conversation available to resume
composedreadUpsert composed structured data
confirmed_measurereadTyped MCP input round
count_recordsreadCount records
countedreadCount dispatches
create_goalwriteCreate the durable objective for this conversation.
custom_idreadRead a custom id
dangerous_changewriteApply one fixture effect.
denied_changewriteMust not run after denial.
describereadDescribe the compiled catalogue
discoveredreadDiscovered bounds
doctorreadInspect the packed executable
doublereadDouble a number
download_nativereadDownload a packed native result
duplicate_namereadDuplicate runtime name
durable_effectreadRecord one fixture effect.
durable_operationwriteRun an application-owned durable operation
dynamic_policyreadIdentity-dependent CLI policy probe
echoreadx
edit_filewriteReplace an exact snippet in one workspace file.
effectreadRecord an effect
effectful_inputreadExercise schema compilation
entity_actionreadAct on an entity
entity_updatewriteUpdate an entity
exportreadExport a document
firstreadFirst
get_goalreadRead the durable objective for this conversation.
globreadList workspace files matching a
goalreadThe durable objective and lifecycle of this conversation.
guardedwriteApply referenced object guards
guarded_operationreadProduce one typed safe refusal
guarded_policyreadGuard policy phases
handoffreadHand a batch of files to a project
handoff_readreadRead one handoff
hidden_runtimereadNot a CLI command by default
inline_toolreadInline registration
inspectreadInspect the packed Node executable
inspect_assetreadInspect one asset
inspect_localreadInspect a local value
integersreadInteger limits
internal_uploadwriteInternal managed failure
interruptwriteInterrupt the active run
interrupt_agentwriteStop one active child conversation at a durable policy boundary.
invalid_exitreadReturn an invalid process status
invalid_outputreadReturn invalid output
invalid_outputless_policyreadCompile-only negative probe
invalid_presenterreadReturn invalid presentation bytes
jobwriteRun job
jobs_snapshotreadSnapshot job state
jobs_statusreadRead job status
jsonlreadStream JSON lines
list_agentsreadList the durable child graph for one parent conversation.
list_directoryreadList the direct entries of one workspace directory.
list_widgetsreadCollision
literalreadRead catalog-restored primitive literals
localreadLocal
local_runtimewriteRun a packed pathless CLI operation
logsreadRead service logs
managedreadA managed operation
mcp_inlinereadInline MCP registration
mcp_onlyreadMCP only
measurereadTyped SDK presenters
member_lookupreadLook up a member
modelwriteChoose the model for the next run
nativereadInspect a parsed invocation
native_failreadFail locally
native_oncereadNative
native_updatewriteUpdate through native MCP content
needreadEcho required text
newwriteStart a new durable conversation
numbersreadA numeric trailing list
numeric_stdinreadNo-policy stdin compatibility probe
orderedreadInvalid positional ordering probe
ordered_valuesreadSeveral explicit positional values
packed_catalog_probereadPacked catalog probe
packed_operationreadPacked durable operation composition
packed_previewreadRender packed preview
permissionsreadShow approval and sandbox enforcement
previewread
preview_assetreadPreview one asset
printwriteWrite directly
publish_projectwritePublish a project
pushwriteA command whose field collides with a global
raw_downloadreadRaw managed download
raw_uploadwriteRaw managed upload
read-onlyreadUpsert read-only structured data
read_filereadRead a bounded UTF-8 slice from a host-authorized workspace file.
read_itemreadRead an item
read_resourcereadRead one exact discovered harness skill or resource by canonical name.
recoverable_changewriteApply one recoverable fixture effect.
render_imagereadRender an image
render_previewreadRender a preview
resource_clockreadCurrent server time and timezone.
resource_diskreadFree space on the data volume.
resumereadResume a durable conversation
run_commandwriteRun a finite host-declared executable with bounded arguments, time and output.
runtimereadRuntime
runtime_arrayreadReturn a runtime array
runtime_deniedreadDenied operation
runtime_metadatareadInspect runtime-tool MCP metadata
runtime_onlyreadRuntime-only CLI
runtime_parallelwriteRun in parallel
runtime_policyreadExercise resolved runtime CLI policy
runtime_previewreadRender a preview
runtime_updatewriteUpdate a runtime entity
safe_uploadwriteSafe managed failure
schedule_afterwriteSchedule durable input after a relative delay.
schedule_atwriteSchedule durable input at an absolute timestamp with an explicit offset.
schedule_cancelwriteCancel one durable deferred-input schedule.
schedule_everywriteSchedule recurring durable input in an explicit conversation timezone.
schedule_listwriteList durable schedules for one conversation.
search_filesreadSearch bounded relative paths or UTF-8 file content under the workspace root.
send_messagewriteSend one follow-up input to an active child conversation.
servewriteRun the server
session_eventreadRead one durable event by exact conversation and sequence address.
session_searchreadSearch authorized durable conversation events and return exact addresses.
session_tracereadRead a bounded contiguous slice of this conversation event trace.
sessionsreadBrowse durable conversations
shared_namereadIdentity binding fixture
skillsreadShow lazily available skills and resources
slow_operationreadWait until transport cancellation
stampreadReturn the identity compiled into this executable
statusreadShow native health
stitchkit.application.admission.acceptedreadAbsolute number of operations accepted in this application lifetime.
stitchkit.application.admission.acceptingreadWhether application admission is currently open.
stitchkit.application.admission.completedreadAbsolute number of operations completed in this application lifetime.
stitchkit.application.admission.pendingreadCurrent number of admitted operations still pending.
stitchkit.application.lifecyclereadCurrent application lifecycle and health state.
stitchkit.application.readyreadWhether the application currently accepts readiness traffic.
stitchkit.application.resource.readyreadWhether each declared managed resource is currently ready.
strict_logsreadRead a bounded log stream
structured_aliasreadStructured alias coercion probe
sumwriteAdd two numbers
throwing_presenterreadThrow from presentation policy
throwing_toolreadThrow
todoreadThe durable ordered work plan for this conversation.
todo_writewriteReplace the durable ordered work plan for this conversation.
toolsreadShow the direct tool surface
transport_probereadProbe transport registration
typed-managedreadStrict neutral construction
typed_inputreadTyped input
unknownreadUnknown failure control
update_goalwriteUpdate the durable objective or lifecycle status.
upload_nativewriteUpload a packed native input
upsertreadUpsert structured data
view_fileread
view_nativereadView protected packed media
void_toolreadNo output
wait_for_jobreadWait for a job
wait_for_nativereadWait for a packed native operation
whoamireadReport the invocation context
workspace_echoreadEcho a workspace value.
write_filewriteWrite bounded UTF-8 content to a host-authorized workspace file.
xreadd
04

Trust audit

BLOCKgrade F · trust 42/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (6 observation(s))
Network
declared (8 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHInventory / provenance · inv.suspicious_name · CWE-1104
packages/core/src/agent-runtime/invocation-payload.ts
invocation-payload.ts
Why it matters. member named after an attack tool
Fix. remove or justify
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/core/src/internal/sqlite.ts:36
exec(sql: string): void;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/core/src/telegram/update-store-sqlite.ts:22
exec(sql: string): unknown;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
scripts/release-prepush.ts:35
let verify = false;
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/create-stitchkit/template/.data/board.sqlite
board.sqlite
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
packages/core/src/entrypoints/tracking.ts:18
export { sendUnloadBeacon } from '../tracking/beacon';
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
packages/core/src/tracking/client.ts:15
import { sendUnloadBeacon } from './beacon';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:110
STARTER_TEST_DATABASE_ADMIN_URL: postgresql://postgres:[email protected]:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:150
STARTER_TEST_DATABASE_ADMIN_URL: postgresql://postgres:[email protected]:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:317
STARTER_TEST_DATABASE_ADMIN_URL: postgresql://postgres:[email protected]:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:352
STARTER_TEST_DATABASE_ADMIN_URL: postgresql://postgres:postgres@postgres:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
packages/core/tests/observability-secret-values.test.ts:17
DATABASE_URL: 'postgresql://app_role:db-pass%[email protected]:5432/app',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/core/scripts/consumer-lane/fixtures/full/src/app.ts:289
const packedOpenRouter = openRouterProvider({ apiKey: 'packed-no-network-key' });
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/core/tests/agent-runtime-operations.test.ts:633
const secret = 'provider-secret-response';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/core/tests/connections-error-projection.test.ts:25
const secret = 'private-url-token-body-stack-marker';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/core/tests/middleware.test.ts:137
const secret = 'test-secret-key-12345';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/core/tests/oauth.test.ts:25
const SECRET = 'test-secret-please-change';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
MEDIUMAuth / authz · mcp.remote_no_auth · CWE-287, CWE-862
streamable-http
Why it matters. a network transport with no auth environment variable found
Fix. require a token
LOWInventory / provenance · inv.suspicious_name · CWE-1104
docs/decisions/0072-http-authorization-precedes-payload-parsing.md
0072-http-authorization-precedes-payload-parsing.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/core/tests/agent-runtime-purge-sqlite.test.ts:26
exec(sql) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/core/tests/agent-runtime-schedule-storage.test.ts:100
exec(sql: string) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/core/tests/agent-runtime-sqlite.test.ts:196
exec(sql) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_random · CWE-327, CWE-338
packages/core/tests/watch-delta.test.ts:294
if (Math.random() < 0.8) object[key] = random(depth + 1);
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/core/tests/observability-json-logger.test.ts:62
logger.warn(`request to https://api.telegram.org/bot${token}/getMe failed`, {

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 9f710db052ddfull audit observations/trust-audit/mcp-server/max-listov__stitchkit.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-129f710db052ddBLOCKF42first audit
06

Questions

What is the stitchkit MCP server?

Contract-first backend framework for Bun and Node — one defineContract() into an HTTP API, MCP tools, AI-agent tools and a typed client.

What tools does stitchkit expose?

167 in total: 130 read-only, 36 that write, and 1 that can delete or overwrite (clear). Every one is listed on this page with its risk.

Is stitchkit safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (42/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does stitchkit need?

No credential environment variables were found in its source, so it appears to need none.

How does stitchkit run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as stitchkit-tui at 0.2.4.

How current is this page?

The grade is for one exact copy of the source (9f710db052dd), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement