Atlas / MCP servers / circuitwall / Jarela

JarelaBLOCK

mcp/circuitwall/jarela

Jarela is a lightweight, full‐featured multi‐agent application that runs locally on your machine.

Verdict
BLOCK
Grade
F
Trust score
22 /100
Exposed tools
200 155r · 78w · 29d
Transport
streamable-http
License
Apache-2.0
Stars
0
01

Overview

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

Jarela is a local-first desktop UI for orchestrating LangGraph agents on your own machine. It keeps agent state, memory, schedules, and model/tool configuration in SQLite under a local data directory, with no hosted backend required.

Highlights

  • Local-first, single-process Next.js app
  • Multi-provider LLM support: Anthropic, OpenAI, Google GenAI, Cohere, DeepSeek, GitHub Copilot
  • Per-agent tool policy, identity, memory, and harness configuration
  • SQLite-backed checkpoints, memory, schedules, proposals, and local integrations
  • Durable, agent-targeted lifecycle signals for restarts, approvals, configuration changes, and background work
  • PWA / desktop-friendly workflow with browser extension support
  • MCP, integration manifests, and built-in tool extension points

Quick start

npm install
npm run dev

Then open http://127.0.0.1:4312.

Documentation

Full docs are organized under the docs site and source docs folder:

  • Live documentation site
  • Docs home
  • Install guide
  • Development guide
  • Architecture
  • Extending Jarela
  • API reference
  • Contributing

Runtime and architecture

The app is built around a single Next.js process with clear layers:

  • app + API routes
  • agent runtime + prompt assembly
  • provider adapters
  • tools + MCP registry
  • SQLite persistence and memory stores
  • integrations, bridges, scheduler, and browser extension surfaces
  • SQLite outbox and leased signal delivery, consumed by the existing agent run queues (no additional broker)

Extension surfaces

Jarela supports explicit extension points for:

  • built-in LLM providers
  • external provider plugins
  • built-in tools
  • MCP servers
  • custom harnesses
  • integration manifests
  • app branding / runtime config

Use the agent tool describe_extension_surfaces and the docs guide for th

Read from source at commit 3ae0d81f68aaOBSERVED · 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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add jarela-oauth-proxy --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env ANTHROPIC_AUTH_TOKEN=${ANTHROPIC_AUTH_TOKEN} --env ATLASSIAN_API_TOKEN=${ATLASSIAN_API_TOKEN} --env CODEX_API_KEY=${CODEX_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "jarela-oauth-proxy": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "ANTHROPIC_AUTH_TOKEN": "${ANTHROPIC_AUTH_TOKEN}",
        "ATLASSIAN_API_TOKEN": "${ATLASSIAN_API_TOKEN}",
        "CODEX_API_KEY": "${CODEX_API_KEY}"
      }
    }
  }
}
03

Exposed tools (200)

155 read · 78 write · 29 destructive. Blast radius: 29 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
APIreadREST
Acmereadd
DefaultreadEvidence-first scaffolding: retrieval-grounded planning, anti-fabrication output discipline, and self-config proposals.
Donereadcompleted
Highestread
Platformreadcore infra
browser_activate_tabreadFocus a browser tab by
browser_clickreadClick an element in the active tab. Identify the target with EXACTLY ONE of:
browser_extractreadRead text or HTML from the active tab. Without
browser_fillreadType
browser_fill_manyreadFill multiple fields in the active tab in one browser round-trip. Use this for forms after a
browser_navigatereadDrive the user
browser_screenshotreadTake a screenshot of the active tab and store it as a local file. Returns a
browser_scrollreadScroll the active tab.
browser_snapshotreadReturn a compact, structured map of the active tab — URL, title, headings, landmarks, and a numbered list of every interactive control (links, buttons, inputs, selects, etc.) with
browser_tabsreadList browser tabs known to the Jarela extension, including tab id, window id, active/focused/pinned/foreground markers, title, URL/host when permissions allow, and whether the tab can be scripted.
calendar_create_eventwriteCreate a Google Calendar event on a calendar (default:
calendar_delete_eventdestructiveDelete a Google Calendar event by id. Attendees are notified by default.
calendar_get_eventreadFetch one Google Calendar event by id. Returns the same slim shape as
calendar_list_calendarsreadList the user
calendar_list_eventsreadList events on a calendar within a time window. Defaults: primary calendar,
calendar_update_eventwritePatch a Google Calendar event. Only the fields you supply are changed;
cancel_scheduled_taskreadCancel a previously scheduled task by id.
cancel_watcherreadCancel a previously registered watcher by id.
check_proposalreadCheck the status of a previously-submitted config-change proposal by its id.
claude_delegatereadDelegate a feature-scoped coding task to a local Claude Code CLI process with full tool access (Read, Write, Edit, Bash, Skill, WebSearch, etc.), running inside the active workspace (call workspace_init first).
claude_delegate_statusreadPoll or cancel a background claude_delegate job. Agent-owned jobs return bounded status/step counts and result_key; use tool_result_get for encrypted terminal output. Legacy unowned jobs return steps/new_steps and the synchronous result shape. Use action:
codex_delegatereadDelegate a focused coding task to the locally installed OpenAI Codex CLI. Call workspace_init with the target repository before this tool, or pass cwd explicitly; do not use Jarela
compact_contextreadSummarize and fold the earlier conversation out of the hot context so the next turns start fresh.
confluence_add_commentwriteAdd a footer comment to a Confluence page (v2). Pass exactly one of
confluence_add_labelwriteAdd one or more labels to a Confluence page (additive — does not replace existing labels).
confluence_create_pagewriteCreate a Confluence page (v2). Pass
confluence_delete_attachmentdestructiveDelete a Confluence attachment by id (v2). Default soft-deletes (trash, restorable). Pass
confluence_delete_commentdestructivePermanently delete a Confluence comment (v2). Pass
confluence_delete_pagedestructiveDelete a Confluence page (v2). Default soft-deletes (page goes to trash, restorable).
confluence_get_attachment_contentreadFetch an attachment
confluence_get_commentsreadList footer comments (and inline comments by default) on a Confluence page. Returns id,
confluence_get_labelsreadList labels on a Confluence page (cursor-paginated). Default limit 50 (max 250).
confluence_get_pagereadFetch a Confluence page by id (v2). Returns title, space_id, parent_id, version, and BOTH
confluence_get_page_ancestorsreadReturn the parent chain (root → leaf) for a Confluence page. Useful for breadcrumbs and
confluence_get_page_by_titlereadFind Confluence page(s) by exact title within a space. Auto-resolves
confluence_get_page_childrenreadList direct children of a Confluence page (cursor-paginated). Pass
confluence_list_attachmentsreadList attachments on a Confluence page (cursor-paginated). Returns id, title, media_type,
confluence_list_spacesreadList Confluence spaces (cursor-paginated). Returns id, key, name, type, status, homepage_id.
confluence_move_pagewriteReorder/reparent a Confluence page (v2).
confluence_remove_labeldestructiveRemove a single label from a Confluence page. Uses the v1 endpoint (v2 Label group is still
confluence_searchreadSearch Confluence pages with CQL (Confluence Query Language).
confluence_update_commentwriteEdit an existing Confluence comment (v2). Pass
confluence_update_pagewriteUpdate an existing Confluence page (v2). Pass exactly one of
confluence_upload_attachmentwriteAttach a file to a Confluence page. Pass content_base64 for binary or content_text for plain
contract_outputreadSynthetic output
cred_toolreadneeds a key
delegate_to_agentreadHand a subtask to another agent that has specialized knowledge or tools you lack.
describe_extension_surfacesreadReturn the curated catalog of every extension surface in this app —
describe_providerwriteReturn capability flags (chat / invoke / stream / embed / list_models)
documents_add_local_sourcewriteAdd a local folder as a Documents source so its files become searchable via documents_search.
documents_add_remote_sourcewriteAdd a Jira project / JQL query / Confluence space / CQL query / GitHub repo as a document source.
documents_index_urlreadFetch and index a single Jira issue, Confluence page, or GitHub PR/issue/file on demand,
documents_list_sourcesreadList the folders Jarela is indexing for document search. Useful before calling
documents_reindex_sourcedestructiveForce an immediate incremental sync of a remote document source. Returns counts of added / updated / unchanged docs.
documents_remove_sourcedestructiveDelete a document source and all its indexed chunks. Destructive — requires
documents_searchreadSearch indexed local documents (notes, READMEs, code, configs) by semantic similarity.
echoreadEcho
echo-asyncreadecho
echo-streamreadechoes args
file_copyreadCopy a file or directory. If destination is an existing directory, source is copied into it. Directories require recursive=true (default).
file_deletedestructiveDelete a file or directory. Non-empty directories require recursive=true. Symlinks are not followed.
file_globreadFind files by glob pattern under a directory. Prefer this over shelling out to rg --files/find/Get-ChildItem for file discovery. Supports *, **, ?, and {a,b} alternation. Skips node_modules/.git/dist/build/.next/coverage/etc by default. Returns POSIX-relative paths from the search root.
file_grepreadSearch file contents under a directory by regex (or literal substring with literal=true). Prefer this over local_exec/terminal grep, rg, Select-String, or Get-ChildItem pipelines for code search. Optional glob filter (e.g.
file_listreadList a directory
file_mkdirwriteCreate a directory. Creates parents by default.
file_movewriteMove or rename a file or directory. If destination is an existing directory, source is moved into it. Handles cross-device moves via copy+remove fallback.
file_multi_editwriteApply multiple anchored str_replace edits to one file atomically. Each edit
file_readreadread files
file_statreadCheck whether a path exists and return its kind, size, and timestamps.
generate_imagereadGenerate one or more images from a text prompt using Google
generate_voicereadSynthesize speech with Google
get_integration_setupreadReturn the full setup manifest for one integration — prerequisites, ordered steps, and
get_user_locationreadGet the user
github_add_commentwritePost a comment on an issue or pull request (GitHub treats both the same).
github_create_issuewriteOpen a new issue in a repository. **PREFER THIS over shell-exec
github_create_pullwriteOpen a pull request. **PREFER THIS over shell-exec
github_create_reviewwriteSubmit a pull-request review (approve / request changes / leave a comment). **PREFER THIS over
github_get_filereadRead a file
github_get_issuereadFetch a single issue (or PR — same endpoint) by number. Returns body capped at 20KB, plus labels,
github_get_pullreadFetch detail on a single pull request — head/base SHAs, mergeable state, additions/deletions,
github_get_reporeadFetch repo summary (default branch, visibility, description, topics, star/fork counts,
github_list_branchesreadList branches in a repository with their head SHAs and protection state. **PREFER THIS over
github_list_issue_commentswriteList comments on an issue or PR. **PREFER THIS over shell-exec
github_list_pull_filesreadList files changed in a pull request, with per-file additions/deletions and (capped) patch text.
github_list_pull_reviewsreadList reviews submitted on a pull request (approvals, change-requests, comment-only). **PREFER THIS
github_list_pullsreadList pull requests for a repository, optionally filtered by state / head branch / base branch.
github_merge_pullwriteMerge a pull request. **PREFER THIS over shell-exec
github_request_reviewersreadRequest review on a pull request from one or more users and/or teams. **PREFER THIS over
github_search_codewriteSearch file contents across GitHub. **PREFER THIS over shell-exec
github_search_issuesreadSearch GitHub issues AND pull requests with the same query syntax as the github.com search bar.
github_update_issuewriteEdit an issue or PR (same endpoint): change title, body, labels, assignees, or close/reopen via
github_update_pullwriteEdit a pull request: title, body, base branch, or close/reopen. **PREFER THIS over shell-exec
gmail_create_draftwriteCreate a Gmail draft. Prefer drafts unless the user explicitly asks to send immediately.
gmail_get_messagereadFetch one Gmail message by id, including full headers and the decoded text body (text/plain
gmail_list_labelsreadList all Gmail labels (system + user). System label ids are uppercase (INBOX, UNREAD,
gmail_modify_messagedestructiveAdd or remove labels on a Gmail message. Common patterns:
gmail_searchreadSearch the user
gmail_send_emailwritesend mail
gmail_trash_messagedestructiveMove a Gmail message to Trash (reversible for 30 days, not permanent delete). Only call this
icloud_calendar_create_eventwriteCreate an event on an iCloud calendar.
icloud_calendar_delete_eventdestructiveDelete an event by UID. For a recurring series this removes every
icloud_calendar_get_eventreadFetch a single event by UID, including the raw iCalendar source.
icloud_calendar_list_calendarsreadList iCloud event calendars (VEVENT collections). Returns the URL
icloud_calendar_list_eventsreadList events in a calendar between two ISO timestamps. The calendar
icloud_calendar_update_eventwritePatch fields on an existing event. Only the supplied fields are
icloud_mail_create_draftwriteSave a new draft to the iCloud Drafts folder. This intentionally does
icloud_mail_delete_messagedestructiveMove a message to the iCloud Trash (recoverable for ~30 days,
icloud_mail_flag_messagedestructiveAdd or remove standard IMAP flags on a message — typically
icloud_mail_get_messagereadFetch a single message by UID. Returns headers, plain-text body,
icloud_mail_list_foldersreadList iCloud Mail folders (mailboxes) with message + unread counts.
icloud_mail_list_messagesreadSearch messages in an iCloud Mail folder. Returns the most recent
icloud_mail_move_messagewriteMove a message to a different folder. To send a message to trash,
icloud_reminders_completereadMark a reminder (VTODO) as completed.
icloud_reminders_createwriteCreate a reminder (VTODO) in an iCloud Reminders list.
icloud_reminders_listreadList reminders (VTODO items) in a Reminders list. The calendar URL
icloud_reminders_list_listsreadList iCloud Reminders lists (VTODO calendar collections). Returns
invoke_toolwriteNever target invoke_tool itself; call the target tool directly. Execute a permitted tool by name only after list_tools finds a tool that is permitted for this agent but was not directly loaded this turn, especially when permission_reason=
jira_add_commentwriteAdd a comment to a Jira issue. Plain text is auto-converted to ADF (Atlassian Document Format).
jira_add_remote_linkwriteAttach a web/external link to a Jira issue (Confluence pages, GitHub PRs, dashboards, Slack threads,
jira_add_worklogwriteLog time spent on a Jira issue. time_spent uses Jira
jira_align_add_commentwritePost a comment on a Jira Align work item. **
jira_align_create_dependencywriteLink two Jira Align work items as a dependency: the predecessor must complete before the
jira_align_create_entitywriteCreate a Jira Align hierarchy entity: program, team, release, sprint (PI), portfolio, or
jira_align_create_itemwriteCreate a Jira Align work item in a given type
jira_align_delete_commentdestructivePermanently delete a comment from a Jira Align work item. **Irreversible.** **
jira_align_delete_dependencydestructivePermanently remove a Jira Align dependency link. **Irreversible.** Use
jira_align_delete_entitydestructivePermanently delete a Jira Align hierarchy entity (program/team/release/sprint/portfolio/
jira_align_delete_itemdestructivePermanently delete a Jira Align work item. **Irreversible.** **
jira_align_get_entityreadFetch a single Jira Align hierarchy entity by id: program, team, release, sprint (PI), portfolio,
jira_align_get_itemreadFetch a Jira Align work item by id. **Must specify
jira_align_list_childrenreadList the direct children of a Jira Align work item. **Both
jira_align_list_commentsreadList comments on a Jira Align work item. **
jira_align_list_dependenciesreadList Jira Align dependencies (links between work items) involving a given item. By default
jira_align_list_entitiesreadList non-work-item Jira Align entities of a given type: programs, teams, releases, sprints (PIs),
jira_align_search_itemsreadSearch Jira Align work items of a given type, with optional state/owner/program/team
jira_align_transition_itemwriteMove a Jira Align work item to a new workflow state (e.g.
jira_align_update_commentwriteEdit the body of an existing comment on a Jira Align work item. **
jira_align_update_entitywritePatch fields on a Jira Align hierarchy entity (program/team/release/sprint/portfolio/value
jira_align_update_itemwritePatch fields on a Jira Align item (title, description, owner, programId, teamId,
jira_create_componentwriteCreate a component on a Jira project. assignee_type controls default assignee for issues with
jira_create_issuewriteCreate a new Jira issue. Defaults to issue_type=
jira_create_issues_bulkwriteCreate up to 50 Jira issues in a single API call. Each entry takes the same shape as
jira_create_sprintwriteCreate a future sprint on a board. New sprints always start in
jira_create_versionwriteCreate a new version on a Jira project. Pass the project key — we resolve it to the numeric id.
jira_delete_attachmentdestructivePermanently delete an attachment from a Jira issue by id. **Destructive — no undo.** Look up
jira_delete_commentdestructivePermanently delete a comment from a Jira issue. **Destructive — no undo.** Look up the id via
jira_delete_issuedestructivePermanently delete a Jira issue. **DESTRUCTIVE — there is no undo from the API.** By default,
jira_delete_linkdestructiveDelete an issue link (Jira-to-Jira, default) or a remote/web link. Look up the id first with
jira_delete_sprintdestructivePermanently delete a sprint. **Irreversible** — issues are unassigned from the sprint but the
jira_find_userreadLook up Jira Cloud users by email or display-name fragment. Returns accountId values
jira_get_attachment_contentreadFetch a Jira issue attachment
jira_get_boardreadFetch board metadata and configuration in one call: id, name, type, project_key, plus filter id,
jira_get_changelogreadFetch a Jira issue
jira_get_commentsreadPaginated comment list for a Jira issue. Use this when an issue has more comments than the
jira_get_issuereadFetch a single Jira issue by key (e.g.
jira_get_projectreadFetch a single Jira project by key. Optionally include versions, components, and/or issue types
jira_get_sprintwriteFetch a single sprint by id. Returns name, state, goal, start/end/complete dates. Use jira_search
jira_link_issueswriteCreate an issue link between two Jira issues (Blocks, Relates, Duplicates, Cloners, etc.).
jira_list_boardsreadList Jira agile boards (Scrum or Kanban). Filter by project key, name fragment, or board type.
jira_list_componentsreadList components on a Jira project. Returns id, name, description, lead, default assignee type.
jira_list_metareadList values for a Jira site-wide enum: issue types, priorities, statuses, or resolutions.
jira_list_projectsreadList Jira projects (paginated). Filter by name fragment via
jira_list_sprintsreadList sprints on a board. Filter by state (
jira_list_versionsreadList versions on a Jira project (paginated). Returns id, name, released/archived flags, dates.
jira_list_worklogsreadList worklog entries on a Jira issue (paginated). Returns id, author, time_spent (display string +
jira_move_issues_to_backlogdestructiveRemove issues from their current sprint and put them back on the backlog. Up to 50 issues per
jira_move_issues_to_sprintwriteMove issues into a sprint. Up to 50 issues per call. Issues already in another sprint are
jira_rank_issuesreadRank up to 50 issues relative to a single anchor issue (before XOR after). Pass
jira_searchwriteSearch Jira issues using JQL. **PREFER THIS over shell-exec
jira_transition_issuereadTransition a Jira issue
jira_update_commentwriteEdit an existing comment on a Jira issue. Plain-text body is auto-converted to ADF (same as
jira_update_issuewriteEdit fields on an existing Jira issue: summary, description, priority, assignee, fix versions,
jira_update_sprintwriteUpdate a sprint
jira_update_versionwriteEdit a version: rename, change dates, mark released/unreleased, mark archived/unarchived.
jira_upload_attachmentwriteUpload a file as an attachment to a Jira issue. Pass content_base64 for binary files (PNG, PDF,
large-asyncreadtest
large-jsonreadtest
large-textreadtest
large-text-flatreadtest
list_harnessesreadList available agent harness presets with ids, names, default status, builtin/custom source, and enabled sections. Read-only. Use before proposing harness changes.
list_integrationswriteList every integration Jarela knows how to set up, with a one-line summary and
list_mcp_serversreadList every configured MCP server (stdio or http transport) with its
list_providersreadList every LLM provider adapter registered in this app (built-in like
list_reaction_scriptsreadList the names of built-in reaction scripts available to schedule_watcher AND
list_scheduled_tasksreadList every scheduled task across all agents. Each row is tagged with
list_skillsreadList all available skills by ID, name, and description. The same list appears in the system prompt; call this only if you need a refreshed view after writing a skill.
list_toolsreadList every tool currently available to this agent — built-in tools,
list_watchersreadList every event-driven watcher across all agents. Each row is tagged
mcp_echoreadEcho via MCP
memory_deletedestructiveDelete a single memory entry by namespace and key. Returns { removed: true } if a row was removed, { removed: false } if no matching row existed. Bulk deletion by namespace is not supported by this tool — list-then-delete-loop if needed.
memory_listreadList memory entries, optionally filtered by namespace. With a search term, matches by meaning and by exact text in keys and values; without one, lists newest first.
memory_readreadread memory
memory_upsertreadStore a durable, structured memory record for proactive semantic recall. Use namespace=
memory_writewriteWrite or update a value in long-term memory. Use this to remember facts, user preferences, or any information that should persist across conversations.
04

Trust audit

BLOCKgrade F · trust 22/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)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

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

Findings (25)

HIGHInventory / provenance · inv.suspicious_name · CWE-1104
app/api/v1/agents/payload.ts
payload.ts
Why it matters. member named after an attack tool
Fix. remove or justify
HIGHInventory / provenance · inv.suspicious_name · CWE-1104
lib/models/editor-payload.ts
editor-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
lib/terminal/session.ts:115
exec(command: string, timeoutMs = 60_000): Promise<ExecResult> {
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
scripts/gmail-oauth.mjs:77
exec(cmd, (err) => { if (err) console.error("Failed to launch browser:", err.message); });
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
CLAUDE.md:1
# Claude Code Project Instructions
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
README.md:1
# Jarela
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
docs/ARCHITECTURE.md:1
# Architecture — Jarela
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
docs/adr/0002-langgraph-as-agent-runtime.md:1
---
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
docs/adr/0003-sqlite-local-persistence.md:1
---
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
lib/tools/runtime/builtins.ts:1
// Barrel of built-in tool modules. Each side-effect import triggers the
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
make.ps1:1
#requires -Version 5.1
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
lib/db/migrations.test.ts:221
const SECRET = "sk-ant-encryption-canary-XYZ"; // jarela-secret-ok
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
lib/redaction/context.test.ts:19
const FAKE_ANT = "sk-ant-abc123def456ghi789jkl000"; // jarela-secret-ok
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
lib/redaction/detect.test.ts:9
const FAKE_ANT = "sk-ant-abc123def456ghi789jkl000"; // jarela-secret-ok
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
lib/redaction/detect.test.ts:10
const FAKE_ANT_HIGH_ENTROPY = "sk-ant-aB3kQ9vXp2mR7tYn4wL8jH5sZ6cF1dG0"; // jarela-secret-ok
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
lib/redaction/mask-messages.test.ts:12
const FAKE_ANT = "sk-ant-abc123def456ghi789jkl000"; // jarela-secret-ok
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
lib/db/migrations.test.ts:221
const SECRET = "sk-ant-encryption-canary-XYZ"; // jarela-secret-ok
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
lib/db/migrations.test.ts:306
const SECRET = "AIza-PRODUCTION-SHAPE";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
lib/stores/integrations.test.ts:155
).run(JSON.stringify({ token: "ghp_legacy_plaintext" }), t, t);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
lib/stores/integrations.test.ts:185
createCredential({ id: "integration-github", type: "integration", provider: "github", auth_method: "api_key", params: { token: "ghp_default_was_first" } });
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
calendar_delete_event, confluence_delete_attachment, confluence_delete_comment, confluence_delete_page, confluence_remove_label, documents_reindex_source, documents_remove_source, file_delete, gmail_m
Why it matters. 29 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
proxy/.gcloudignore
.gcloudignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.suspicious_name · CWE-1104
app/api/v1/agents/payload.test.ts
payload.test.ts
Why it matters. member named after an attack tool
Fix. remove or justify
LOWInventory / provenance · inv.suspicious_name · CWE-1104
lib/models/editor-payload.test.ts
editor-payload.test.ts
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
app/api/v1/integrations/[name]/test/route.ts:57
: await exec();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 3ae0d81f68aafull audit observations/trust-audit/mcp-server/circuitwall__jarela.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-123ae0d81f68aaBLOCKF22first audit
06

Questions

What is the @circuitwall/jarela MCP server?

Jarela is a lightweight, full‐featured multi‐agent application that runs locally on your machine.

What tools does @circuitwall/jarela expose?

200 in total: 155 read-only, 78 that write, and 29 that can delete or overwrite (calendar_delete_event, confluence_delete_attachment, confluence_delete_comment, confluence_delete_page, confluence_remove_label). Every one is listed on this page with its risk.

Is @circuitwall/jarela safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (22/100) and found 9 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: 29 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does @circuitwall/jarela need?

It reads ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, ATLASSIAN_API_TOKEN, CODEX_API_KEY, COHERE_API_KEY, DEEPSEEK_API_KEY, FAKE_API_KEY, FAKE_OTHER_TOKEN, FAKE_TEST_KEY_THAT_IS_NEVER_SET, FIRECRAWL_API_KEY, GEMINI_API_KEY and GH_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @circuitwall/jarela run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as jarela-oauth-proxy at 1.0.0.

How current is this page?

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

Advertisement