@zibby/skillsBLOCK
Pluggable MCP tool modules that give agent workflows their capabilities — GitHub, GitLab, Sentry, Slack, Jira, Notion, memory, datasets, and more.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://www.npmjs.com/package/@zibby/skills) [](https://www.npmjs.com/package/@zibby/skills) [](./LICENSE)
Deutsch | Español | français | 日本語 | 한국어 | Português | Русский | 中文
📖 Full docs: docs.zibby.app · Get Started · Concepts · Designing agents · CLI Reference · Cloud
The skill layer for [@zibby/agent-workflow](https://github.com/ZibbyDev/agent-workflow). Built-in skill definitions that give a workflow node the tools it needs — function tools, MCP servers, browser, issue trackers, memory. Vendor-neutral, JavaScript-first.
@zibby/skills is the batteries-included companion to `@zibby/agent-workflow` (npm) — "Graph-based AI agent workflow orchestration." The workflow engine ships zero skills on purpose; this package is where the built-in ones live.
A skill is the contract between a workflow node and a tool. It tells the engine what the tool does, how to start it, and what it needs. The engine never hardcodes any skill by name — it reads the skill definition and wires things up generically for both Claude and Cursor agents.
@zibby/agent-workflow node @zibby/skills
────────────────────────── ─────────────
skills: ['add'] ──► getSkill('add')
0ee40fe4a03bOBSERVED · 2026-10-12Connect
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 mcp add pingcode-mcp --env DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN} --env GITHUB_TOKEN=${GITHUB_TOKEN} --env GITLAB_OAUTH_TOKEN=${GITLAB_OAUTH_TOKEN} --env GITLAB_TOKEN=${GITLAB_TOKEN} -- npx -y [email protected]{
"mcpServers": {
"pingcode-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"DISCORD_BOT_TOKEN": "${DISCORD_BOT_TOKEN}",
"GITHUB_TOKEN": "${GITHUB_TOKEN}",
"GITLAB_OAUTH_TOKEN": "${GITLAB_OAUTH_TOKEN}",
"GITLAB_TOKEN": "${GITLAB_TOKEN}"
}
}
}
}Exposed tools (200)
159 read · 81 write · 11 destructive. Blast radius: 11 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
DM | read | |
Eng | read | engineering |
On-Call | read | Weekly rotation |
add_node | write | Add a new node to an existing workflow. Generates the node file and updates the barrel export. |
artifact_get | read | Fetch ONE artifact you published, by id → { metadata, content }. Use to reuse / edit / re-publish a page. To LIST what you have published, use your kv-memory tool kv_recall_prefix with keyPrefix |
artifact_publish | write | Publish a NEW self-contained, shareable page (report/plan/table/dashboard/diagram/write-up) and get back a shareable URL. |
artifact_share | read | Make an artifact viewable WITHOUT a Zibby login, by password. Returns { url, password } — a link anyone can open plus the password that opens it. |
artifact_unshare | destructive | REMOVE an artifact\ |
artifact_update | write | Revise an EXISTING artifact by id — the shareable URL stays the same, the content is replaced (new version). Pass the fields to change (title and/or markdown|html|text). |
auth_status | read | |
build_workflow | read | Generate real workflow code on disk from a design spec. Uses the configured AI agent for high-quality code generation. |
chart_render | read | Render a chart LOCALLY (no external service) from a standard Apache ECharts option. |
close_workspace | destructive | Remove an unused clean workspace and release its storage reservation. Refuses to discard changes, local commits or extra files. Does not delete the original host directory. |
code_stats_glob_hit | read | How many of paths match ANY of globs (supports **, *, ?). Returns { total, hits, ratio, matched }. Use for reproducible core-path coverage against the caller\ |
code_stats_percentile | read | The 0-100 percentile rank of value within values (cumulative |
create_ticket | write | |
dataset_query | write | Run a SQL-style query over a bound store to build reports: select/aggregate (count|sum|avg|min|max), filter, group, order, limit, and bound by month. Returns { columns, rows }. Use this to compute summaries/aggregations from records you appended earlier. |
deploy_workflow | write | Deploy a workflow to Zibby Cloud. Returns the trigger URL. |
design_workflow | read | Design a workflow spec (nodes, edges, descriptions) for the user to review before building. Call this after understanding requirements. |
discord_list_channels | read | List the text channels of the connected Discord server (id + name). Pass guildId only when the bot is in multiple servers. |
discord_send_message | write | Post a message to a Discord channel as the connected bot. Text over 2000 chars is automatically split into sequential messages. |
echo | read | Echo one message |
ensure_store | write | Create (or reuse) a store ON DEMAND for THIS agent — use when you need a store that was NOT declared/bound at deploy. Idempotent by name and private to this agent: calling again with the same name returns the SAME store (safe to call at the start of every run). Returns { storeId }. For type |
explore_framework_docs | read | Read Zibby framework documentation on demand. Call this before building complex workflows or when you need details on advanced patterns (middleware, conditional routing, skills, deployment, CLI commands). |
figma_get_comments | read | Read the comments on a Figma file |
figma_get_file | read | Get a Figma file\ |
figma_get_file_versions | read | List a Figma file\ |
figma_get_image_fills | read | Get a map of imageRef → download URL for every image fill used in a Figma file. |
figma_get_me | read | Get the authenticated Figma user profile (handle, email, id) — confirms the token works. |
figma_get_nodes | read | Get specific nodes from a Figma file by their node ids. Use after figma_get_file to inspect a particular frame/component without re-fetching the whole file. Node ids look like |
figma_get_project_files | read | List the files in a Figma project (from figma_get_team_projects). Returns file key, name, thumbnail, last_modified. |
figma_get_team_projects | read | List the projects in a Figma team. Get team_id from a Figma team URL (.../files/team/<TEAM_ID>/...). |
figma_parse_url | read | Local helper (no API call): extract the file key and node id (colon form) from a figma.com file/design URL. Returns { file_key, node_id }. |
figma_post_comment | write | Post a comment on a Figma file (WRITE — needs a PAT with comment-write scope). Optionally reply to a comment (comment_id), pin it to a node (node_id, with optional x/y offset), or pin to a canvas point (x/y). |
figma_render_png | read | Render one or more Figma nodes to an image and return the URLs (a map of nodeId → URL). Despite the name it renders PNG/JPG/SVG/PDF (default png). Use to show or download a visual of a frame/component. |
file_delete | destructive | For FILE-type stores: delete ONE stored file by its relative path. Returns { ok, path, deleted }. Errors if the path does not exist. |
file_get | read | For FILE-type stores: read ONE stored file back by its relative path. Text files come back as |
file_list | read | For FILE-type stores: list the stored files — each entry has { path, size, lastModified }. Optionally filter by a path |
file_put | destructive | For FILE-type stores: write (or overwrite) ONE file at a relative path — raw JSON dumps, CSVs, images, snapshots, any blob you want to keep across your stateless runs. Text goes in |
gbrain_delete | destructive | Remove documents from the knowledge base by their stable sourceId(s). |
gbrain_ingest | read | Upsert documents into the knowledge base. Each doc is { sourceId, markdown, deleted? }; sourceId is a STABLE id (e.g. |
gbrain_query | read | Semantic-search the knowledge base and return the most relevant document chunks (each with its sourceId and relevance score). |
gdocs_append | read | Append markdown/text content to the END of an existing Google Doc. Only works on docs this app created or the user explicitly picked (drive.file scope). Accepts a documentId or a full docs.google.com URL. Returns { ok, documentId, url }. |
gdocs_create_doc | write | Create a new Google Doc with a title and optional content (markdown: #/##/### headings, - bullets, 1. numbered lists, **bold**, [links](url), |
gdocs_insert_image | write | Append a LOCAL image file (png/jpg, max 5MB) to the END of an existing Google Doc. The image is uploaded to the user\ |
gdocs_list_created | read | List the Google Docs visible to this integration, newest first (max 25). NOTE: under the drive.file scope this lists ONLY docs the app created or the user explicitly picked — it is NOT a full Drive search. Returns { ok, count, files:[{ documentId, title, modifiedTime, url }] }. |
git_checkout | read | Clone a git repository locally (or pull latest if already cloned). Auto-authenticates with GitHub/GitLab tokens if available. |
git_explore | read | Quick structural overview of a cloned repo: key files, package.json info, directory tree (top 2 levels), detected framework/language |
git_list_repos | read | List locally cloned repositories |
github_add_issue_comment | write | Add a comment to a GitHub issue. Also the way to record a PR link on an issue (post a markdown link). |
github_clone | read | Clone a GitHub repository to the local filesystem. Use when user says |
github_close_issue | write | Close a GitHub issue. Optionally set the close reason (completed or not_planned). |
github_create_issue | write | Create a GitHub issue |
github_create_review | write | Post a review on a pull request: a summary body plus optional inline comments anchored to file/line, with an event (COMMENT, APPROVE, or REQUEST_CHANGES). Use this to deliver a code review back to the PR. |
github_get_commit | write | Get details of a specific commit — message, stats, file diffs |
github_get_file | read | Read a file (or list a directory) from a GitHub repo, without cloning. Works on any branch/ref. |
github_get_issue | read | Get a single GitHub issue with full detail (title, body, state, labels, assignee, url) |
github_get_issue_comments | read | Get the comment thread on a GitHub issue (chronological) |
github_get_pr | read | Get details of a pull request — title, description, branch, stats |
github_get_pr_diff | read | Get the unified diff of a pull request — the actual code changes |
github_get_review_thread | read | Read a PR review-comment THREAD given any comment id in it: the root review comment + all its replies, plus the anchored diff context (file, line, the original diff hunk). Use this to understand a human\ |
github_get_user | read | Get the authenticated GitHub user profile and their organizations |
github_label_issue | destructive | Add, set (replace all), or remove labels on a GitHub issue. Labels back state-like transitions on GitHub. |
github_list_commits | read | List commits on a branch — optionally bounded by since/until ISO dates (date-window listing) and paginated (keep calling with page+1 while hasMore is true). Optionally filtered by file path. |
github_list_issues | read | List issues in a repo (excludes pull requests). Filter by state, labels, and an updated-since cursor for polling. |
github_list_orgs | read | List GitHub organizations the authenticated user belongs to |
github_list_pr_comments | read | Get all review and issue comments on a PR |
github_list_pr_files | read | List files changed in a PR with per-file patches |
github_list_repos | read | List the repositories this token/installation can access (omit owner) — or a specific user/org\ |
github_reopen_issue | read | Reopen a closed GitHub issue |
github_reply_issue_comment | write | Post a reply on a PR\ |
github_reply_review_thread | read | Reply IN-THREAD to an existing PR review-comment thread (a conversational reply nested under the thread the human commented on — NOT a fresh full review). Pass any comment id in the thread. |
github_search_code | read | Search code across GitHub repositories by keyword |
github_search_issues | read | Search GitHub issues and pull requests |
github_search_repos | read | Search accessible repositories by name or description. Use this when the user asks to find a specific repo. |
gitlab_add_issue_comment | write | Add a comment to a GitLab issue. Also the way to record an MR link on a ticket (post a markdown link). |
gitlab_create_mr_review | write | Post a full review on a GitLab merge request in one call: a summary note plus optional inline comments anchored to file/line in the diff. Convenience wrapper over gitlab_post_mr_note + gitlab_post_mr_discussion. |
gitlab_get_commit | write | Get ONE commit\ |
gitlab_get_discussion | write | Read a single GitLab merge-request DISCUSSION (thread) by its discussion id: all notes in order plus the diff position (file + line) it is anchored to. Use this to understand a human\ |
gitlab_get_issue | read | Get a single GitLab issue with full detail (title, description, state, labels, assignees, web url). |
gitlab_get_mr_changes | write | Get the changed files of a GitLab merge request with per-file diffs — the actual code changes to review. Also returns diff_refs for inline comments. |
gitlab_list_commits | read | List a project\ |
gitlab_list_issues | read | List a GitLab project\ |
gitlab_list_mr_notes | write | List the discussion notes on a GitLab merge request (chronological). |
gitlab_list_mrs | read | List a GitLab project\ |
gitlab_list_projects | read | List the GitLab projects this token can access (the projects you are a member of), optionally filtered by a search query. Use this to discover a RELATED project worth cloning when a change\ |
gitlab_post_mr_note | write | Post a general (non-inline) comment on a GitLab merge request. Use for a review summary or a top-level remark. |
gitlab_reply_discussion | write | Reply IN-THREAD to an existing GitLab merge-request discussion (a conversational reply appended to the SAME thread — NOT a fresh review). Use after gitlab_get_discussion to answer a human\ |
graph_get | read | Fetch one node (by |
graph_put | write | Create or update a node (an entity: a file, ticket, run, person, repo, conclusion) in the memory graph. Upsert by id ( |
graph_subgraph | read | Export the induced subgraph around a query: every node the same recall would reach, plus ALL live edges among those nodes (not just the cheapest paths). The input for visualisation and for hand-offs that need the full local structure. Same filters as a recall query; the seeds are always included. |
graph_trace | read | A node |
hubspot_associate | read | Associate two CRM records with the default association type (e.g. a contact to a company). Returns { ok:true }. |
hubspot_create_note | write | Log a note (hs_note_body) and optionally associate it to a contact/company/deal/ticket. Returns { id, associatedTo }. |
hubspot_create_object | write | Create a CRM record. Pass |
hubspot_get_object | read | Fetch one CRM record by id. Returns { id, properties }. |
hubspot_list_objects | read | Page through records of a CRM object type. Returns { results, paging } — pass paging.next.after back as |
hubspot_list_properties | read | List the defined properties (name, label, type, fieldType) for a CRM object type. Call this FIRST so you use valid property names when creating/updating/searching. |
hubspot_search | read | Search a CRM object type. Pass a full-text |
hubspot_update_object | write | Update (PATCH) a CRM record by id. Pass |
hubspot_whoami | read | Confirm the HubSpot token works: returns the portal (hub) id, account type, time zone and UI domain. |
install_skill | write | Install a skill into the current chat session so its tools become available |
jira_add_comment | write | Add a comment to a Jira issue |
jira_create_issue | write | Create a new Jira issue. For |
jira_edit_issue | write | Update fields on a Jira issue (summary, description, story points, labels, priority). A string |
jira_get_comments | read | Get comments on a Jira issue (newest first) — use this to find testing steps, notes, etc. When the user asks about testing steps, test cases, or wants to run tests for a ticket, call this: testing steps are typically written in the ticket\ |
jira_get_issue | read | Get details of a specific Jira issue |
jira_get_sprint_issues | read | Get all issues in a sprint, optionally filtered by status column name. Returns status breakdown. |
jira_list_issue_types | read | List issue types allowed for issue creation in the given project. |
jira_list_projects | read | List all Jira projects accessible to the user. Call this when the user asks about projects or boards. |
jira_list_sprints | read | List sprints for a Jira project (returns sprint names, IDs, states, dates). When the user asks about sprints: jira_list_sprints → jira_get_sprint_issues. |
jira_list_statuses | read | List Jira statuses. Use projectKey to get statuses applicable in that project workflow. |
jira_move_issue_to_sprint | write | Move an issue to a sprint by id/name/target and verify membership. When user asks to move ticket into a sprint, do NOT use status transition: use this tool (issueKey, projectKey?, sprintId|sprintName|target) and report verified result. |
jira_move_to_active_sprint | write | Backward-compatible alias: move issue to sprint target and verify membership. |
jira_search | read | Search Jira issues using JQL. |
jira_transition_issue | write | Move a Jira issue to a different status. Always pass toStatus when user gave a target; only pass issueKey alone when you explicitly need to list transitions. |
kv_recall | read | Recall the value you stored under a plain key (exact match). Your per-agent namespace is added automatically — pass a plain key like |
kv_recall_prefix | read | List your entries whose plain key STARTS WITH a prefix (e.g. |
kv_store | destructive | Store (overwrite) a value under a plain key so a later run of yours can recall it. Your per-agent namespace is added automatically. |
lark_get_chat_history | read | |
lark_list_chats | read | |
lark_lookup_user_by_email | read | |
lark_reply | read | |
lark_search_users | read | |
lark_send_message | write | |
larkattendance_list_groups | write | DISCOVERY (start here). List this tenant\ |
larkattendance_list_stats_fields | read | DISCOVERY — call this BEFORE larkattendance_query_stats. Lists every statistic column this tenant has for the period, grouped (e.g. 基本信息 / 出勤统计 / 异常统计 / 每日统计 / 自定义字段). The 自定义字段 group is tenant-defined and exists nowhere else, so this is the only way to learn its codes. Match the user\ |
larkattendance_resolve_users | read | Map work EMAIL addresses to the attendance user ids (tenant user_id = the attendance API\ |
larkbitable_read_records | read | Read the rows of one table in a Lark/Feishu Base (多维表格 / bitable) as flat text. Accepts a Base URL (/base/... or a /wiki/... link fronting a Base) or app token; the table and view are taken from the URL |
larkdoc_add_comment | write | Post a NEW top-level comment on a Lark/Feishu document. Accepts a documentId or full doc URL plus text. Returns { ok, documentId, commentId }. |
larkdoc_append | read | Append markdown/text content to the END of an existing Lark/Feishu document (docx). Accepts a documentId or a full Lark doc URL. Returns { ok, documentId, url }. |
larkdoc_get | read | Read a Lark/Feishu document (docx) as plain text, for use as reference context. Accepts a raw doc id OR a full Lark doc URL (a /docx/ or /wiki/ link — wiki links are resolved to their backing docx). Returns { ok, documentId, title, url, text }. Text is truncated to ~20k chars. |
larkdoc_insert_image | write | Append a LOCAL image file (png/jpg, max 10MB) to the END of an existing Lark/Feishu document (docx). Accepts a documentId or full doc URL plus a local file path. Optional width/height in pixels. Returns { ok, documentId, blockId, fileToken, url }. |
larkdoc_list_comments | read | List the comment threads on a Lark/Feishu document. Accepts a documentId or full doc URL. Returns { ok, comments:[{ commentId, replies:[{ replyId, author, text }] }] }. Use to read the thread you are replying to. |
larkdoc_reply_comment | read | Reply INSIDE an existing comment thread on a Lark/Feishu document. Pass { documentId, commentId, text }. Use to answer a user who @mentioned Zibby in a doc comment (reply in the same commentId). Returns { ok, documentId, commentId, replyId }. |
larkwiki_list_spaces | read | List the Lark/Feishu wiki spaces visible to the connected app. Returns { ok, count, spaces:[{ spaceId, name }] }. Use to discover the wikiSpaceId for larkdoc_create. |
linear_add_comment | write | Add a comment to a Linear issue (markdown supported). |
linear_get_comments | read | Get comments on a Linear issue (newest first). |
linear_get_issue | read | Get a single Linear issue by identifier (e.g. ENG-123) or internal uuid — title, description, state, labels, assignee, url. |
linear_link_attachment | read | Attach a URL (e.g. a GitHub PR) to a Linear issue via native attachments. Use this for PR links; fall back to linear_add_comment if it fails. |
linear_list_issues | read | List/poll Linear issues filtered by team, state, label, assignee, and an updatedAfter cursor. Returns newest-updated first. |
linear_list_labels | read | List issue labels, optionally scoped to a team. |
linear_list_states | read | List a team |
linear_list_teams | read | List Linear teams (id, key, name). Needed to scope workflow states and issue queries. |
linear_update_state | write | Move a Linear issue to a different workflow state. Pass a state NAME (toStatus/stateName) and the tool resolves it to the issue |
linkedin_list_organizations | read | List the LinkedIn Organizations (company Pages) the authenticated member ADMINISTERS. Returns [{ id, urn, name, vanityName }]. Call this first to choose the author org for a draft post. |
linkedin_publish_post | write | PUBLISH a post to the authenticated member\ |
list_available_skills | read | List all skills that can be installed, with their env-var readiness status |
list_directory | read | List files and directories in a path. Returns names with type indicators (/ for dirs). |
list_messages | read | List YOUR agent\ |
list_products | read | |
list_running_agents | write | List the runs active right now that this run may reach (the agent\ |
list_specs | read | List available test spec files in the project |
list_ticket_types | read | |
list_tickets | read | |
list_workflows | read | List all local workflows in .zibby/workflows/. |
list_workspaces | read | List this conversation’s saved workspaces, status, revisions, directories and account storage reservations. Does not start another agent. |
memory_brief | read | Get a compact briefing: recent session summaries + top relevant facts. Call at the start of a conversation. |
memory_end_session | write | End the current session and save a summary for future recall. Call when a task is complete. |
memory_get_navigation | read | Query known page-to-page transitions |
memory_get_page_model | read | Query page structure — elements, roles, selectors |
memory_get_selectors | read | Query known selectors for a page with stability metrics |
memory_get_test_history | read | Query recent test runs with pass/fail results and timing |
memory_recall | read | Search persistent memory by keyword, category, ticket, or tier. Returns matching facts and context. |
memory_save_insight | write | Save a useful observation for future runs (selector tips, timing, workarounds) |
memory_store | write | Save a fact, decision, or context to persistent memory. Survives across sessions. |
message_agent | read | Leave a note for another agent — OR FOR YOURSELF, to be picked up in a later round. |
needs_you | write | Put a card in front of a PERSON on the project\ |
notion_add_comment | write | Post a comment on Notion. To REPLY within an existing discussion, pass { discussionId, text }. To start a NEW top-level comment on a page, pass { pageId, text }. Returns { ok, id, discussionId }. Use this to answer a user who @mentioned Zibby in a Notion comment (reply in the same discussionId). |
notion_append_blocks | read | Append markdown (or raw Notion blocks) to the END of an existing Notion page. Accepts a page id or full Notion URL. Chunks automatically at Notion\ |
notion_get_page | read | Fetch a Notion page and its content flattened to markdown, for use as read-only context. Accepts a raw page id OR a full Notion URL. Returns { ok, id, title, url, text }. Text is truncated to ~20k chars. |
notion_insert_image | write | Append an image block to a Notion page. Pass imagePath for a LOCAL .png/.jpg file (max 20MB — uploaded via Notion |
notion_list_comments | read | List the open comment discussions on a Notion page/block. Accepts a page/block id OR a full Notion URL. Returns { ok, comments:[{ id, discussionId, text, author }] }. Use to read the comment thread you are replying to. |
notion_query_database | read | Query a Notion database and return a bounded list of rows (id, title, url, key props). Accepts a database id OR full Notion URL. Optional Notion filter object. Returns at most 25 rows. Use to find a specific page, then notion_get_page it. |
open_url | read | Open a URL in the user\ |
open_workspace | read | Open a user-named local file or directory for LIVE reading, or reuse it. No Git or commit required; includes current uncommitted and ignored files. Original content is read-only. |
opendesign_cli_run | write | Start an OpenDesign agent run. Returns a runId; poll opendesign_cli_status with it until the run finishes. |
opendesign_cli_status | write | Poll the status of an OpenDesign agent run by its runId. |
opendesign_export_html | read | Fetch an OpenDesign project |
opendesign_export_pdf | read | Export an OpenDesign project deck to PDF. Returns the export result (e.g. a download URL/path). |
opendesign_get_design | read | Get a single live design artifact by id. Requires both the design id and its projectId. |
opendesign_get_project | read | Get a single OpenDesign project by id. |
opendesign_health | read | Probe the OpenDesign instance (GET /api/health, no auth). Use to confirm connectivity before other calls. |
opendesign_list_designs | read | List the live design artifacts in an OpenDesign project. Requires the projectId, which scopes the query. |
opendesign_list_projects | read | List the projects in the OpenDesign workspace. |
person_verification | read | Ask the person, right now, for a sign-in step only they can give, and wait here for it. Exactly three kinds, and the platform refuses any other: |
publish_workspace_file | write | Store ONE local file on the platform in a single call, and return its |
read_file | read | Read the contents of a file. Returns the text content. |
read_run_logs | write | Read a run\ |
refresh_workspace | read | Explicitly refresh from the source’s current committed version. Refuses modified, untracked or ignored files and local commits. Failed preparation preserves the existing workspace. Returns the replacement workspace id. |
relation_add | write | Record that <subject> —<relation>→ <object>, with what it rests on and why. It is saved first and applied to the graph after: the answer says state |
relation_adopt | write | Set aside every live edge of one relation name that was NOT recorded through the relation tools (it has no source), so relations recorded before they were maintained never read as current. Nothing is deleted. Running it again finds nothing. Maintainers only. |
relation_confirm | read | Decide a PROPOSAL: accept makes it a fact (the proposer stays its author, you are recorded as the one who confirmed it), decline retires it with your reason. Maintainers only. |
relation_copies | read | For many subjects in one call: the latest receipt of each published copy of their relations (relation_copy_record) — where it lives, which version and generation it was made from, the hash of its text, when and by whom — and, as a plain fact, whether the relations have moved since: |
relation_copy_record | read | Record the RECEIPT of a copy of a subject |
relation_dependents | read | The same relations read from the other end: for each object, the subjects that assert <relation> to it (\ |
relation_history | write | Every relation operation accepted for a subject, in order: who, at what standing, why, what it changed and the version it produced. Read from the platform |
relation_list | read | The relations of many subjects in one call. Per subject and per kind of relation: coverage ( |
relation_rebuild | write | Put the graph back in step with the platform |
relation_remove | destructive | Retire assertions — nothing is deleted, the history keeps who and why. Say WHICH in one of three ways: |
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.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- declared (11 observation(s))
- Shell
- declared (13 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
pattern: 'yaml.load(...)',
patterns: [{ 'pattern-either': [{ pattern: 'system(...)' }, { pattern: 'eval(...)' }] }],patterns: [{ 'pattern-either': [{ pattern: 'system(...);' }, { pattern: 'exec(...);' }, { pattern: 'shell_exec(...);' }] }],await exec(pullCmd, cwd);
const head = await exec(`git -C "${repoPath}" log -1 --format="%h %s"`, cwd);await exec(cloneArgs.join(' '), cwd);Make an artifact viewable WITHOUT a Zibby login, by password. Returns { url, password } — a link anyone can open plus the password that opens it.`${GBRAIN_DATA_ROOT}/kb-<sha256(kbId)>/.gbrain/brain.pglite`, selected via aconsole.log(` MCP endpoint: POST ${PUBLIC_BASE_URL}/mcp (header: X-Figma-Token: <PAT>)`);console.log(`revoked ${t}; ${n} token(s) remain`);CMD node -e "fetch('http://127.0.0.1:' + (process.env.PORT || 8093) + '/health').then(r => process.exit(r.ok ? 0 : 1), () => process.exit(1))"<br>🧑🤝🧑 Sharing one machine and home directory with teammates? Install under a per-person
const TOKEN = 'ghs_TESTTOKEN0123456789';
token: 'verified-by-zibby-run-auth',
const TOKEN = 'glpat-SECRETgitlab789';
const TOKEN = 'glpat-SUPERSECRET123';
const TOKEN = 'ghp_SUPERSECRETtoken0123456789';
run({ SLACK_BOT_TOKEN: 'xoxb-test-not-real' });run({ WORKFLOW_CONNECTED_INTEGRATIONS: 'slack,lark', SLACK_BOT_TOKEN: 'xoxb-test-not-real', PROJECT_API_TOKEN: 'run-token' });expect(spec.env.SLACK_BOT_TOKEN).toBe('xoxb-test-not-real');artifact_unshare, close_workspace, file_delete, file_put, gbrain_delete, github_label_issue, kv_store, relation_remove, run_cancel, uninstall_skill, vikunja_remove_label
.nsprc
const CANONICAL = here('../../../core/src/utils/repo-access.js');const out = await call({ spec: barSpec, output: 'svg', filename: '../../etc/passwd' });process.env.PINGCODE_REST_ROOT = `http://127.0.0.1:${srv.address().port}`;Gates applied: no_behavioural_pass.
0ee40fe4a03bfull audit observations/trust-audit/mcp-server/zibbydev__skills.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | 0ee40fe4a03b | BLOCK | F | 42 | first audit |
Questions
What is the @zibby/skills MCP server?
Pluggable MCP tool modules that give agent workflows their capabilities — GitHub, GitLab, Sentry, Slack, Jira, Notion, memory, datasets, and more.
What tools does @zibby/skills expose?
200 in total: 159 read-only, 81 that write, and 11 that can delete or overwrite (artifact_unshare, close_workspace, file_delete, file_put, gbrain_delete). Every one is listed on this page with its risk.
Is @zibby/skills safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (42/100) and found 8 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: 11 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does @zibby/skills need?
It reads DISCORD_BOT_TOKEN, GITHUB_TOKEN, GITLAB_OAUTH_TOKEN, GITLAB_TOKEN, JIRA_API_TOKEN, LARK_APP_SECRET, LARK_DOCS_APP_SECRET, LINEAR_API_KEY, LINEAR_OAUTH_TOKEN, OAUTH_CALLBACK_PATH_NONCE, OPENAI_API_KEY and PINGCODE_CLIENT_SECRET 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 @zibby/skills run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as pingcode-mcp at 0.2.4.
How current is this page?
The grade is for one exact copy of the source (0ee40fe4a03b), read on 2026-10-12. The repository is watched and re-audited when it changes.