{"id":"e1897e62-5671-4909-a217-8cf4beeb1453","entityType":"agent","slug":"clawhub-chrischall-artsonia-mcp","name":"artsonia-mcp","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-artsonia-mcp","canonicalPath":"/agent/clawhub-chrischall-artsonia-mcp","generatedAt":"2026-10-10T06:01:53.437Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":null},"description":"Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below). Skill: artsonia-mcp Owner: chrischall Summary: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:artsonia-mcp","sourceUrl":"https://clawhub.ai/chrischall/artsonia-mcp","homepage":"https://clawhub.ai/chrischall/skills/artsonia-mcp","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/artsonia-mcp","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/artsonia-mcp","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, vi"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":null},"stars":null,"forks":null,"downloads":1964,"packageName":null,"latestVersion":"1.2.5","tractionLabel":"2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T21:47:27.293Z","lastCrawledAt":"2026-10-09T21:47:27.293Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T21:47:27.293Z","lastVerifiedAt":null,"highlights":[{"version":"1.2.5","createdAt":"2026-10-07T13:37:09.707Z","changelog":"- Added documentation for the new MCP_CONFIRM_ELICITATION environment variable. - Removed the redundant skill-card.md file. - SKILL.md: updated environment variable documentation for clarity and completeness. - No breaking changes to core functionality.","fileCount":3,"zipByteSize":4785},{"version":"1.2.4","createdAt":"2026-10-05T02:48:21.257Z","changelog":"- Removed the skill-card.md file. - No functional changes to code or documented features.","fileCount":3,"zipByteSize":4626},{"version":"1.2.3","createdAt":"2026-10-03T01:40:00.342Z","changelog":"- Updated documentation in SKILL.md with improved details for the artsonia_download_artwork tool, specifying stricter download destination requirements. - Removed the skill-card.md file.","fileCount":3,"zipByteSize":4744},{"version":"1.2.2","createdAt":"2026-09-28T13:56:06.974Z","changelog":"- Adds documentation for new `omitted_count` and `omitted` fields in `artsonia_download_artwork`, clarifying handling when the result size exceeds 10 MiB on inline deployments. - Removed obsolete `skill-card.md` file. - No breaking changes to configuration or API.","fileCount":3,"zipByteSize":4719},{"version":"1.2.1","createdAt":"2026-09-25T15:55:20.016Z","changelog":"- Removed the skill-card.md file. - No feature or functionality changes.","fileCount":3,"zipByteSize":4575},{"version":"1.2.0","createdAt":"2026-09-24T15:10:41.091Z","changelog":"Confirmation for critical actions and improved download preview - Write actions now require user confirmation, including a preview and a token-based confirmation step. - Detailed instructions for confirming actions without prompt support (`MCP_CONFIRM_MODE`). - The artwork download preview is now described as a \"confirmation preview\" and reflects first-call behavior. - Updated environment variables to cover new confirmation controls and token handling. - Removed the obsolete skill-card.md file.","fileCount":3,"zipByteSize":4728},{"version":"1.1.4","createdAt":"2026-09-23T21:39:46.642Z","changelog":"- Removed the skill card documentation file (skill-card.md). - No changes to core skill functionality or interface. - Documentation cleanup only; user features remain unchanged.","fileCount":3,"zipByteSize":3995},{"version":"1.1.3","createdAt":"2026-09-23T15:41:38.517Z","changelog":"- Removed the skill-card.md file. - No changes to functionality or public API. - Documentation and setup instructions remain unchanged.","fileCount":3,"zipByteSize":4048}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:artsonia-mcp","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T06:01:53.435Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-artsonia-mcp/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":null},"readme":"Skill: artsonia-mcp\n\nOwner: chrischall\n\nSummary: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n\nTags: latest:1.2.5\n\nVersion history:\n\nv1.2.5 | 2026-10-07T13:37:09.707Z | auto\n\n- Added documentation for the new MCP_CONFIRM_ELICITATION environment variable.\n- Removed the redundant skill-card.md file.\n- SKILL.md: updated environment variable documentation for clarity and completeness.\n- No breaking changes to core functionality.\n\nv1.2.4 | 2026-10-05T02:48:21.257Z | auto\n\n- Removed the skill-card.md file.\n- No functional changes to code or documented features.\n\nv1.2.3 | 2026-10-03T01:40:00.342Z | auto\n\n- Updated documentation in SKILL.md with improved details for the artsonia_download_artwork tool, specifying stricter download destination requirements.\n- Removed the skill-card.md file.\n\nv1.2.2 | 2026-09-28T13:56:06.974Z | auto\n\n- Adds documentation for new `omitted_count` and `omitted` fields in `artsonia_download_artwork`, clarifying handling when the result size exceeds 10 MiB on inline deployments.\n- Removed obsolete `skill-card.md` file.\n- No breaking changes to configuration or API.\n\nv1.2.1 | 2026-09-25T15:55:20.016Z | auto\n\n- Removed the skill-card.md file.\n- No feature or functionality changes.\n\nv1.2.0 | 2026-09-24T15:10:41.091Z | auto\n\nConfirmation for critical actions and improved download preview\n\n- Write actions now require user confirmation, including a preview and a token-based confirmation step.\n- Detailed instructions for confirming actions without prompt support (`MCP_CONFIRM_MODE`).\n- The artwork download preview is now described as a \"confirmation preview\" and reflects first-call behavior.\n- Updated environment variables to cover new confirmation controls and token handling.\n- Removed the obsolete skill-card.md file.\n\nv1.1.4 | 2026-09-23T21:39:46.642Z | auto\n\n- Removed the skill card documentation file (skill-card.md).\n- No changes to core skill functionality or interface.\n- Documentation cleanup only; user features remain unchanged.\n\nv1.1.3 | 2026-09-23T15:41:38.517Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or public API.\n- Documentation and setup instructions remain unchanged.\n\nv1.1.2 | 2026-09-21T05:03:40.505Z | auto\n\n- Removed the file skill-card.md from the skill package.\n- No changes to features, API, or documentation detected beyond the file removal.\n\nv1.1.1 | 2026-09-21T04:13:05.148Z | auto\n\n- Removed the \"skill-card.md\" file from the project.\n- No changes to feature set or user-facing functionality.\n- Documentation and core setup instructions remain unchanged.\n\nv1.1.0 | 2026-09-20T02:48:53.356Z | auto\n\n- Removed the skill-card.md file.\n- No changes to skill behavior or configuration.\n\nv1.0.0 | 2026-09-19T01:20:55.718Z | auto\n\nartsonia-mcp 1.0.0\n\n- Initial public release.\n- Provides access to Artsonia student-art portfolios, comments, and fan management via MCP.\n- Includes core tools for listing students, fetching portfolios and artwork details, downloading artwork, managing comments and fans, and setting notifications.\n- Offers setup instructions for both npx and source installation.\n- Documentation covers authentication and all supported environment variables.\n- Removed sample file: skill-card.md.\n\nv0.12.3 | 2026-09-15T19:26:55.768Z | auto\n\n- Removed the file: skill-card.md\n- No changes to features or functionality.\n\nv0.12.2 | 2026-09-14T14:09:06.658Z | auto\n\n- Removed unnecessary documentation file: skill-card.md.\n- No functional changes to the skill's code or behavior.\n\nv0.12.1 | 2026-09-10T17:50:13.602Z | auto\n\n- Removed the file: skill-card.md\n- No user-facing features or major changes; this version only removes a documentation file.\n\nv0.12.0 | 2026-09-04T22:28:33.139Z | auto\n\n- Removed the file skill-card.md.\n- No changes to functionality or documentation content; housekeeping update only.\n\nv0.11.0 | 2026-08-29T13:54:00.744Z | auto\n\n- Removed the file skill-card.md.  \n- No changes to functionality or documentation content.  \n- Maintenance update to clean up unused or unnecessary files.\n\nv0.10.1 | 2026-08-28T21:06:59.144Z | auto\n\n- Removed redundant file: skill-card.md, reducing duplication.\n- No changes to functionality or documentation in SKILL.md.\n- Housekeeping release; project files streamlined.\n\nv0.10.0 | 2026-08-28T11:34:46.220Z | auto\n\n- Added documentation for two new environment variables: `ARTSONIA_SESSION_CACHE` (allows disabling the on-disk session cache) and `ARTSONIA_SESSION_FILE` (allows customizing the session cache file path).\n- Removed the redundant skill-card.md file.\n- No changes to server functionality; update clarifies configuration options for session caching and file location.\n\nv0.9.0 | 2026-08-09T21:03:25.528Z | auto\n\n- Added support for the ARTSONIA_INLINE_DOWNLOADS environment variable to return downloaded artwork images as inline base64 blocks on hosted deployments.\n- Removed the skill-card.md file.\n- Updated documentation in SKILL.md to reflect the new environment variable and usage instructions.\n\nv0.8.4 | 2026-08-06T00:42:59.172Z | auto\n\n- Removed the sample file skill-card.md from the project.\n- No changes to functionality or user-facing features.\n\nv0.8.3 | 2026-07-30T12:53:21.518Z | auto\n\n- Improved `artsonia_download_artwork` tool with new options for organizing downloads (`path_template`), embedding artwork metadata in image files (`embed_metadata`), writing per-artwork metadata sidecars (`write_metadata`), and filtering private artworks (`include_private`).\n- Removed the `skill-card.md` file.\n- Expanded tool descriptions in the documentation, especially for download-related features.\n- No changes to authentication or environment variable requirements.\n\nv0.5.0 | 2026-06-10T02:10:10.910Z | auto\n\n- Added documentation for two new tools: `artsonia_get_portfolio` now supports an `include_details` option, and `artsonia_download_artwork` enables downloading student artwork images with optional manifest generation.\n- Removed the file: skill-card.md.\n\nv0.4.0 | 2026-06-05T20:59:46.948Z | auto\n\n- Removed the file skill-card.md.\n- No changes to functionality or features.\n\nv0.3.0 | 2026-06-05T19:51:00.869Z | auto\n\n- Removed the file: skill-card.md\n- No changes to core features or functionality.\n- Cleanup of documentation files only.\n\nv0.2.0 | 2026-06-05T17:50:29.535Z | auto\n\n- Added SKILL.md with detailed setup instructions, environment variable options, and descriptions of available tools.\n- Clarified triggers and intended usage, including natural language requests related to student art portfolios, comments, and fans.\n- Outlined both npx and source installation methods.\n- Listed all core, portfolio, and social tool endpoints with descriptions.\n- Provided authentication details and environment variable documentation for configuration.\n\nArchive index:\n\nArchive v1.2.5: 3 files, 4785 bytes\n\nFiles: skill-card.md (1903b), SKILL.md (7931b), _meta.json (131b)\n\nFile v1.2.5:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. `dest` must be inside `ARTSONIA_OUTPUT_DIR` when set, else `~/Downloads` or `~/Pictures` (`$MCP_DATA_DIR/downloads` when hosted); any other folder is refused before anything is fetched. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, `omitted_count`/`omitted` (only when an inline-delivery deployment dropped images over its 10 MiB per-result cap — those are fetched but NOT delivered, so they are not in `downloaded`), and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The confirmation preview (the first call on a client without prompts) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n### Confirming writes\n\nThe write tools (`artsonia_post_comment`, `artsonia_invite_fan`, `artsonia_set_notifications`, `artsonia_mark_feedback_read`, `artsonia_download_artwork`) ask the user to confirm first. Where the client can show a confirmation prompt, it does. Otherwise the first call changes nothing and returns `status: \"confirmation-required\"` with a `preview` of exactly what would be sent or written and a `confirmToken`: show the preview to the user, and only after they approve in chat call the tool again with the **same arguments** plus `confirmToken`. A token works once (`TOKEN_REUSED`), expires, and is refused as `DRAFT_CHANGED` (with a fresh preview and token) if the arguments or the data it acts on changed in between. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this fallback.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `MCP_CONFIRM_MODE` | No | What a write does on a client that cannot show a confirmation prompt: `ask-user` (default — preview + token, user approves in chat), `auto` (the model may use the token after reviewing the preview), or `refuse`. An unrecognised value is treated as `refuse`. |\n| `MCP_CONFIRM_ELICITATION` | No | `off` never shows a confirmation prompt, so every client gets the `MCP_CONFIRM_MODE` token flow — for a client that claims to support prompts but never shows one (the write hangs — opencode 2.0.x). Defaults to `on`; any other value stays `on`, with a warning on stderr. |\n| `MCP_CONFIRM_TTL_SECONDS` | No | How long a confirmation token stays valid. Defaults to `600`. |\n| `MCP_CONFIRM_SECRET` | No | Token signing key; set it only if tokens must survive a server restart. Defaults to random per process. |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.2.5:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.5\",\n  \"publishedAt\": 1791380229707\n}\n\nFile v1.2.5:skill-card.md\n\n## Description:\n\nConnects an agent to Artsonia to view student artwork, comments, and fans and manage account interactions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nParents and fans use an agent to browse linked students' artwork and activity, read comments and feedback, download images, and manage comments, fan invitations, or notifications.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Artsonia credentials and cached sessions grant access to a user's account.\n\nMitigation: Install only if you trust the Artsonia MCP package, protect credentials in the MCP configuration, and review or disable session caching as appropriate.\n\nRisk: Comments, fan invitations, notification changes, and artwork downloads can affect the account or children's artwork privacy.\n\nMitigation: Keep write confirmations enabled and review the preview and destination before approving these actions.\n\n## Reference(s):\n\n- [Artsonia MCP package](https://www.npmjs.com/package/artsonia-mcp)\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Configuration instructions, Shell commands]\n\n**Output Format:** [Text and Markdown with MCP configuration examples and tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Artwork downloads can produce image files and optional JSON indexes or metadata sidecars.]\n\n## Skill Version(s):\n\n1.2.5 (source: server-resolved release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.2.4: 3 files, 4626 bytes\n\nFiles: skill-card.md (1838b), SKILL.md (7620b), _meta.json (131b)\n\nFile v1.2.4:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. `dest` must be inside `ARTSONIA_OUTPUT_DIR` when set, else `~/Downloads` or `~/Pictures` (`$MCP_DATA_DIR/downloads` when hosted); any other folder is refused before anything is fetched. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, `omitted_count`/`omitted` (only when an inline-delivery deployment dropped images over its 10 MiB per-result cap — those are fetched but NOT delivered, so they are not in `downloaded`), and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The confirmation preview (the first call on a client without prompts) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n### Confirming writes\n\nThe write tools (`artsonia_post_comment`, `artsonia_invite_fan`, `artsonia_set_notifications`, `artsonia_mark_feedback_read`, `artsonia_download_artwork`) ask the user to confirm first. Where the client can show a confirmation prompt, it does. Otherwise the first call changes nothing and returns `status: \"confirmation-required\"` with a `preview` of exactly what would be sent or written and a `confirmToken`: show the preview to the user, and only after they approve in chat call the tool again with the **same arguments** plus `confirmToken`. A token works once (`TOKEN_REUSED`), expires, and is refused as `DRAFT_CHANGED` (with a fresh preview and token) if the arguments or the data it acts on changed in between. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this fallback.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `MCP_CONFIRM_MODE` | No | What a write does on a client that cannot show a confirmation prompt: `ask-user` (default — preview + token, user approves in chat), `auto` (the model may use the token after reviewing the preview), or `refuse`. An unrecognised value is treated as `refuse`. |\n| `MCP_CONFIRM_TTL_SECONDS` | No | How long a confirmation token stays valid. Defaults to `600`. |\n| `MCP_CONFIRM_SECRET` | No | Token signing key; set it only if tokens must survive a server restart. Defaults to random per process. |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.2.4:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.4\",\n  \"publishedAt\": 1791168501257\n}\n\nFile v1.2.4:skill-card.md\n\n## Description:\n\nHelps agents access student artwork portfolios, comments, fans, and account notifications on Artsonia through MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nParents, fans, and their agents can view linked students' artwork and activity, manage comments and fans, adjust notifications, and download artwork with account authorization.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Artsonia credentials and saved sessions could expose a parent or fan account.\n\nMitigation: Keep passwords, MCP configuration, .env files, and session caches private and out of source control.\n\nRisk: Comments, fan invitations, notification changes, and artwork downloads can affect others or expose student artwork.\n\nMitigation: Review confirmation previews before approving actions and handle downloaded artwork, especially private pieces, carefully.\n\n## Reference(s):\n\n- [ClawHub artsonia-mcp release](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [artsonia-mcp npm package](https://www.npmjs.com/package/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Configuration, Files]\n\n**Output Format:** [Markdown guidance, structured tool responses, and downloaded artwork images]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Account-changing actions and downloads require confirmation previews by default.]\n\n## Skill Version(s):\n\n1.2.4 (source: server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.2.3: 3 files, 4744 bytes\n\nFiles: skill-card.md (2127b), SKILL.md (7620b), _meta.json (131b)\n\nFile v1.2.3:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. `dest` must be inside `ARTSONIA_OUTPUT_DIR` when set, else `~/Downloads` or `~/Pictures` (`$MCP_DATA_DIR/downloads` when hosted); any other folder is refused before anything is fetched. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, `omitted_count`/`omitted` (only when an inline-delivery deployment dropped images over its 10 MiB per-result cap — those are fetched but NOT delivered, so they are not in `downloaded`), and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The confirmation preview (the first call on a client without prompts) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n### Confirming writes\n\nThe write tools (`artsonia_post_comment`, `artsonia_invite_fan`, `artsonia_set_notifications`, `artsonia_mark_feedback_read`, `artsonia_download_artwork`) ask the user to confirm first. Where the client can show a confirmation prompt, it does. Otherwise the first call changes nothing and returns `status: \"confirmation-required\"` with a `preview` of exactly what would be sent or written and a `confirmToken`: show the preview to the user, and only after they approve in chat call the tool again with the **same arguments** plus `confirmToken`. A token works once (`TOKEN_REUSED`), expires, and is refused as `DRAFT_CHANGED` (with a fresh preview and token) if the arguments or the data it acts on changed in between. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this fallback.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `MCP_CONFIRM_MODE` | No | What a write does on a client that cannot show a confirmation prompt: `ask-user` (default — preview + token, user approves in chat), `auto` (the model may use the token after reviewing the preview), or `refuse`. An unrecognised value is treated as `refuse`. |\n| `MCP_CONFIRM_TTL_SECONDS` | No | How long a confirmation token stays valid. Defaults to `600`. |\n| `MCP_CONFIRM_SECRET` | No | Token signing key; set it only if tokens must survive a server restart. Defaults to random per process. |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.2.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.3\",\n  \"publishedAt\": 1790991600342\n}\n\nFile v1.2.3:skill-card.md\n\n## Description:\n\nConnects an agent to Artsonia to view linked students' artwork, comments, fans, and activity and to manage comments, invitations, and notifications.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nParents and fans with linked Artsonia accounts use this skill to browse student portfolios and feedback, download artwork, post comments, invite fans, and adjust notifications through an agent.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Artsonia account credentials and linked student artwork, comments, fans, and notifications are accessible to the MCP server.\n\nMitigation: Install only if you trust the server with the account and its linked student data; keep credentials private.\n\nRisk: Artwork downloads and session data may remain on a shared device.\n\nMitigation: Choose a private download location and disable or relocate the session cache on shared machines.\n\nRisk: Comments, invitations, notification changes, and downloads can have unintended effects.\n\nMitigation: Keep the default confirmation mode and approve previews before writes or downloads.\n\n## Reference(s):\n\n- [Artsonia MCP skill release](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [artsonia-mcp npm package (linked in skill)](https://www.npmjs.com/package/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Files, Configuration instructions]\n\n**Output Format:** [Structured tool results; optionally downloaded artwork images and JSON metadata]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a registered Artsonia MCP server and account credentials; write actions request confirmation by default.]\n\n## Skill Version(s):\n\n1.2.3 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.2.2: 3 files, 4719 bytes\n\nFiles: skill-card.md (2223b), SKILL.md (7434b), _meta.json (131b)\n\nFile v1.2.2:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, `omitted_count`/`omitted` (only when an inline-delivery deployment dropped images over its 10 MiB per-result cap — those are fetched but NOT delivered, so they are not in `downloaded`), and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The confirmation preview (the first call on a client without prompts) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n### Confirming writes\n\nThe write tools (`artsonia_post_comment`, `artsonia_invite_fan`, `artsonia_set_notifications`, `artsonia_mark_feedback_read`, `artsonia_download_artwork`) ask the user to confirm first. Where the client can show a confirmation prompt, it does. Otherwise the first call changes nothing and returns `status: \"confirmation-required\"` with a `preview` of exactly what would be sent or written and a `confirmToken`: show the preview to the user, and only after they approve in chat call the tool again with the **same arguments** plus `confirmToken`. A token works once (`TOKEN_REUSED`), expires, and is refused as `DRAFT_CHANGED` (with a fresh preview and token) if the arguments or the data it acts on changed in between. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this fallback.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `MCP_CONFIRM_MODE` | No | What a write does on a client that cannot show a confirmation prompt: `ask-user` (default — preview + token, user approves in chat), `auto` (the model may use the token after reviewing the preview), or `refuse`. An unrecognised value is treated as `refuse`. |\n| `MCP_CONFIRM_TTL_SECONDS` | No | How long a confirmation token stays valid. Defaults to `600`. |\n| `MCP_CONFIRM_SECRET` | No | Token signing key; set it only if tokens must survive a server restart. Defaults to random per process. |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.2\",\n  \"publishedAt\": 1790603766974\n}\n\nFile v1.2.2:skill-card.md\n\n## Description:\n\nHelps agents access Artsonia student-art portfolios, comments, fans, and notifications through an MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nArtsonia account holders use this skill to ask an agent about linked students' artwork, activity, comments, and fans, and to request artwork downloads or confirmed updates to comments, fan invitations, and notifications.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Artsonia credentials and a cached session cookie could expose account access if shared.\n\nMitigation: Protect the MCP environment configuration and session files; use an account you are comfortable granting this access to.\n\nRisk: Artwork downloads and metadata may include private student content and be stored locally.\n\nMitigation: Choose download destinations carefully, protect downloaded files, and exclude private artwork when it is not needed.\n\nRisk: Posting comments, inviting fans, or changing notifications can modify the account.\n\nMitigation: Keep the default ask-user confirmation mode and review each preview before approving a write.\n\n## Reference(s):\n\n- [ClawHub artsonia-mcp release](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [artsonia-mcp npm package](https://www.npmjs.com/package/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Configuration instructions, Shell commands, Files]\n\n**Output Format:** [Markdown guidance with JSON configuration and shell examples; MCP tool results include artwork information and optional downloaded files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Downloads can include images, an optional JSON index and metadata sidecars; inline results report omissions when the 10 MiB cap is reached.]\n\n## Skill Version(s):\n\n1.2.2 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.2.1: 3 files, 4575 bytes\n\nFiles: skill-card.md (2151b), SKILL.md (7246b), _meta.json (131b)\n\nFile v1.2.1:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The confirmation preview (the first call on a client without prompts) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n### Confirming writes\n\nThe write tools (`artsonia_post_comment`, `artsonia_invite_fan`, `artsonia_set_notifications`, `artsonia_mark_feedback_read`, `artsonia_download_artwork`) ask the user to confirm first. Where the client can show a confirmation prompt, it does. Otherwise the first call changes nothing and returns `status: \"confirmation-required\"` with a `preview` of exactly what would be sent or written and a `confirmToken`: show the preview to the user, and only after they approve in chat call the tool again with the **same arguments** plus `confirmToken`. A token works once (`TOKEN_REUSED`), expires, and is refused as `DRAFT_CHANGED` (with a fresh preview and token) if the arguments or the data it acts on changed in between. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this fallback.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `MCP_CONFIRM_MODE` | No | What a write does on a client that cannot show a confirmation prompt: `ask-user` (default — preview + token, user approves in chat), `auto` (the model may use the token after reviewing the preview), or `refuse`. An unrecognised value is treated as `refuse`. |\n| `MCP_CONFIRM_TTL_SECONDS` | No | How long a confirmation token stays valid. Defaults to `600`. |\n| `MCP_CONFIRM_SECRET` | No | Token signing key; set it only if tokens must survive a server restart. Defaults to random per process. |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.1\",\n  \"publishedAt\": 1790351720016\n}\n\nFile v1.2.1:skill-card.md\n\n## Description:\n\nHelps agents access Artsonia student-art portfolios, activity, comments, and fans, and manage artwork downloads and account interactions through an MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nParents and authorized caregivers use an agent to view a student's Artsonia artwork and activity, review comments and fans, download artwork, and request confirmed changes to comments, invitations, or notifications.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external MCP server receives Artsonia login credentials and may cache a session locally.\n\nMitigation: Use only an authorized account, protect credentials and local session files, and disable the session cache if needed.\n\nRisk: Artwork downloads may include private student images and metadata written to disk.\n\nMitigation: Check the destination and optional metadata settings before confirming; exclude private artwork when it is not needed.\n\nRisk: Comments, fan invitations, notification changes, and downloads can affect an account or create local files.\n\nMitigation: Keep confirmation mode at its default, review the preview, and approve only the intended action.\n\n## Reference(s):\n\n- [Artsonia MCP skill on ClawHub](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [artsonia-mcp npm package](https://www.npmjs.com/package/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files, Configuration instructions]\n\n**Output Format:** [Agent responses and optional downloaded images or JSON metadata files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Artwork downloads and account changes require confirmation by default.]\n\n## Skill Version(s):\n\n1.2.1 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.2.0: 3 files, 4728 bytes\n\nFiles: skill-card.md (2413b), SKILL.md (7246b), _meta.json (131b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The confirmation preview (the first call on a client without prompts) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n### Confirming writes\n\nThe write tools (`artsonia_post_comment`, `artsonia_invite_fan`, `artsonia_set_notifications`, `artsonia_mark_feedback_read`, `artsonia_download_artwork`) ask the user to confirm first. Where the client can show a confirmation prompt, it does. Otherwise the first call changes nothing and returns `status: \"confirmation-required\"` with a `preview` of exactly what would be sent or written and a `confirmToken`: show the preview to the user, and only after they approve in chat call the tool again with the **same arguments** plus `confirmToken`. A token works once (`TOKEN_REUSED`), expires, and is refused as `DRAFT_CHANGED` (with a fresh preview and token) if the arguments or the data it acts on changed in between. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`) controls this fallback.\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `MCP_CONFIRM_MODE` | No | What a write does on a client that cannot show a confirmation prompt: `ask-user` (default — preview + token, user approves in chat), `auto` (the model may use the token after reviewing the preview), or `refuse`. An unrecognised value is treated as `refuse`. |\n| `MCP_CONFIRM_TTL_SECONDS` | No | How long a confirmation token stays valid. Defaults to `600`. |\n| `MCP_CONFIRM_SECRET` | No | Token signing key; set it only if tokens must survive a server restart. Defaults to random per process. |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1790262641091\n}\n\nFile v1.2.0:skill-card.md\n\n## Description:\n\nAccess Artsonia student-art portfolios, comments, and fans via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to connect an MCP client to Artsonia so they can inspect student artwork portfolios, comments, fans, notifications, and related account activity through natural-language requests.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill handles Artsonia credentials and cached session data.\n\nMitigation: Install only from a trusted package source, provide credentials only in an appropriate local MCP configuration, and review or disable the session cache path when needed.\n\nRisk: The skill can access or export student artwork, comments, feedback, and private portfolio data.\n\nMitigation: Treat exported files and metadata as private data, choose download destinations deliberately, and use options that exclude private pieces when sharing or archiving output.\n\nRisk: Write-capable tools can post comments, invite fans, change notification settings, mark feedback read, or download artwork.\n\nMitigation: Keep confirmation mode at the default user-approval flow or refuse writes; avoid automatic confirmation unless the deployment explicitly accepts that risk.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [npm package](https://www.npmjs.com/package/artsonia-mcp)\n- [Project source link from artifact](https://github.com/chrischall/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, API Calls, Files, Markdown]\n\n**Output Format:** [Markdown guidance with JSON configuration examples, shell commands, and MCP tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May return Artsonia account data, confirmation previews, downloaded artwork files, metadata sidecars, and index manifests depending on the invoked MCP tool.]\n\n## Skill Version(s):\n\n1.2.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.4: 3 files, 3995 bytes\n\nFiles: skill-card.md (2180b), SKILL.md (5851b), _meta.json (131b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The dry run (no `confirm`) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1790199586642\n}\n\nFile v1.1.4:skill-card.md\n\n## Description:\n\nAccess Artsonia student-art portfolios, comments, and fans via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to connect an agent to an Artsonia MCP server for student portfolios, artwork details, comments, fans, downloads, and notification preferences.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server uses Artsonia account credentials and maintains a session cookie, so account access and the session cache are sensitive.\n\nMitigation: Install only from a trusted package source, provide credentials only in a trusted local environment, and disable or relocate the session cache on shared machines.\n\nRisk: Student artwork, comments, downloaded images, metadata sidecars, embedded image metadata, and manifests can contain sensitive student or family information.\n\nMitigation: Use a private local download destination, avoid embedding or writing metadata unless needed, and review whether private artwork should be excluded before downloading.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [artsonia-mcp npm package](https://www.npmjs.com/package/artsonia-mcp)\n- [artsonia-mcp source link from artifact](https://github.com/chrischall/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with JSON configuration snippets and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guides agent use of an MCP server that can return portfolio data, comments, fan information, downloaded files, image metadata, and local manifests.]\n\n## Skill Version(s):\n\n1.1.4 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.3: 3 files, 4048 bytes\n\nFiles: skill-card.md (2301b), SKILL.md (5851b), _meta.json (131b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The dry run (no `confirm`) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1790178098517\n}\n\nFile v1.1.3:skill-card.md\n\n## Description:\n\nAccess Artsonia student-art portfolios, comments, fans, downloads, and notification settings through an MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to connect an agent to Artsonia parent or fan accounts for viewing student artwork, managing comments and fans, downloading portfolio images, and updating notification preferences.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill handles children's portfolio data and may create local image downloads or metadata sidecars containing sensitive family or student records.\n\nMitigation: Treat downloaded files, index manifests, and metadata sidecars as sensitive records; store them only in trusted locations and remove them when no longer needed.\n\nRisk: The MCP configuration or .env file contains Artsonia account credentials, and sessions may be cached on disk.\n\nMitigation: Install only on a trusted machine, protect credential files, and disable or relocate the session cache on shared systems.\n\nRisk: Some tools can post comments, invite fans, or change notification preferences on an Artsonia account.\n\nMitigation: Require user review before allowing account-changing actions such as posting comments, inviting fans, or updating notifications.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [ClawHub publisher profile](https://clawhub.ai/user/chrischall)\n- [npm package](https://www.npmjs.com/package/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with JSON and shell command snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Artsonia account credentials and a registered artsonia MCP server.]\n\n## Skill Version(s):\n\n1.1.3 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.2: 3 files, 4122 bytes\n\nFiles: skill-card.md (2450b), SKILL.md (5851b), _meta.json (131b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The dry run (no `confirm`) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1789967020505\n}\n\nFile v1.1.2:skill-card.md\n\n## Description:\n\nAccess Artsonia student-art portfolios, comments, fans, notifications, and artwork downloads through an MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users with an Artsonia parent or fan account use this skill to connect an agent to Artsonia, retrieve student portfolios and artwork details, post comments, manage fans and notifications, and download artwork files when needed.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server uses Artsonia account credentials and can access student portfolio data.\n\nMitigation: Install only when comfortable providing Artsonia credentials, keep credentials private, and limit use to authorized accounts and devices.\n\nRisk: Artwork downloads, metadata embeds, indexes, sidecar files, and session data may persist child artwork, comments, teacher feedback, and account data locally.\n\nMitigation: Use private destination folders, enable metadata or sidecar options only when needed, and review locally stored files before sharing or retaining them.\n\nRisk: Comment posting, fan invitations, and notification updates can change account-visible Artsonia state.\n\nMitigation: Review those actions before execution and use them only for intended students, artworks, recipients, and notification settings.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [npm package](https://www.npmjs.com/package/artsonia-mcp)\n- [Source repository](https://github.com/chrischall/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, Configuration, Shell commands, Files]\n\n**Output Format:** [Markdown with JSON and bash code blocks; MCP tool responses may include text, structured records, and downloaded files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May write downloaded artwork images, optional metadata sidecars, indexes, embedded image metadata, and session-cache files depending on configuration.]\n\n## Skill Version(s):\n\n1.1.2 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.1: 3 files, 4048 bytes\n\nFiles: skill-card.md (2378b), SKILL.md (5851b), _meta.json (131b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_template` — same tokens (`{title}` `{project}` `{grade}` `{date}` `{school_year}` `{artwork_id}`), segments slugified like filenames, empty tokens collapse, and paths stay deterministic so `skip_existing` re-runs remain idempotent. Optional `embed_metadata: boolean` (default `false`) embeds each image's title/project/grade and source date (its `Last-Modified`) into the JPEG's EXIF (ImageDescription, DateTimeOriginal) and IPTC (title, keywords, date) so the metadata survives renames/moves and is searchable in Spotlight/Apple Photos; the count is returned as `embedded_count` (best-effort — a failed embed writes the original bytes). Optional `write_index: boolean` (default `false`) writes an `index.json` manifest into the destination listing the downloaded items (`artwork_id`, `title`, `file` — dest-relative, `grade`, `project`, `date`); the manifest path is returned as `index_file`. Optional `write_metadata: boolean` (default `false`) writes a per-artwork `<image-name>.json` sidecar next to each image with the artwork's comments and teacher feedback (plus title/project/grade); the count is returned as `metadata_count`. Optional `include_private: boolean` (default `true`) — set `false` to exclude private pieces (`private_excluded_count` reports how many were dropped). The result carries totals (`total_bytes`, `downloaded_count`/`skipped_count`/`failed_count`/`private_count`), a per-file `is_private` flag, and — on unfiltered runs — a `count_check` against the student's `artwork_count` with a `warning` when the pull looks partial. The dry run (no `confirm`) adds `estimated_bytes` per item and `estimated_total_bytes`. |\n\n### Social\n| Tool | Description |\n|------|-------------|\n| `artsonia_list_comments` | List comments on an artwork |\n| `artsonia_get_fans` | Get the fan list for a student |\n| `artsonia_post_comment` | Post a comment on an artwork |\n| `artsonia_invite_fan` | Invite someone to become a fan of a student |\n| `artsonia_set_notifications` | Update notification preferences for a student |\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |\n| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |\n| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |\n| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |\n| `ARTSONIA_INLINE_DOWNLOADS` | No | Set to `1` on a hosted deployment to return `artsonia_download_artwork` images as inline base64 blocks instead of writing them to a disk the user can't reach. Leave unset for local installs. |\n| `ARTSONIA_SESSION_CACHE` | No | Set to `false` to disable the on-disk session cache and log in on every start. Defaults to enabled (direct transport only). |\n| `ARTSONIA_SESSION_FILE` | No | Override the session cache path. Defaults to `$MCP_DATA_DIR/.artsonia-mcp/session-<user>.json` — one file per user, so per-credential clients do not clobber each other. |\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1789963985148\n}\n\nFile v1.1.1:skill-card.md\n\n## Description:\n\nAccess Artsonia student-art portfolios, comments, fans, artwork downloads, and notification tools through an Artsonia MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers with Artsonia parent or fan credentials use this skill to query student portfolios, review artwork activity, manage comments, fans, and notifications, and download artwork through an MCP server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill handles Artsonia credentials and can maintain a session cache.\n\nMitigation: Install only if the external artsonia-mcp package is trusted, protect Artsonia credentials, and disable or relocate the session cache on shared machines.\n\nRisk: The skill can post comments, invite fans, change notification settings, and download private student artwork.\n\nMitigation: Use explicit confirmations for account-changing actions and private artwork downloads, and review destinations and privacy settings before execution.\n\nRisk: The skill handles child artwork and related account data.\n\nMitigation: Use the skill only with appropriate Artsonia accounts and keep downloaded artwork or metadata in controlled storage.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n- [artsonia-mcp npm package](https://www.npmjs.com/package/artsonia-mcp)\n- [Repository link listed by skill artifact](https://github.com/chrischall/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with JSON and shell command snippets; MCP tool calls can return text, structured records, and downloaded files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires an installed Artsonia MCP server and Artsonia credentials; some actions may need explicit user confirmation.]\n\n## Skill Version(s):\n\n1.1.1 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: artsonia-mcp Owner: chrischall Summary: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any ","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: artsonia-mcp\ndescription: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).\n---\n\n# artsonia-mcp\n\nMCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.\n\n- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)\n- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)\n\n## Setup\n\n### Option A — npx (recommended)\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"artsonia-mcp\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n### Option B — from source\n\n```bash\ngit clone https://github.com/chrischall/artsonia-mcp\ncd artsonia-mcp\nnpm install && npm run build\n```\n\nThen add to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"artsonia\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/artsonia-mcp/dist/index.js\"],\n      \"env\": {\n        \"ARTSONIA_USERNAME\": \"your-email@example.com\",\n        \"ARTSONIA_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\nOr use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.\n\n## Authentication\n\nUsername/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.\n\n## Tools\n\n### Core\n| Tool | Description |\n|------|-------------|\n| `artsonia_healthcheck` | Check connectivity and authentication status |\n| `artsonia_list_students` | List all students linked to the account |\n\n### Portfolio & Artwork\n| Tool | Description |\n|------|-------------|\n| `artsonia_get_activity` | Get recent activity feed for a student |\n| `artsonia_get_portfolio` | Get a student's art portfolio. Optional `include_details: boolean` (default `false`) fetches each artwork's full detail (title/project/grade/views/…) concurrently and merges it into the rows; omit it for the fast, lean tiles. |\n| `artsonia_get_artwork` | Get details for a single artwork |\n| `artsonia_download_artwork` | Download a student's artwork images to a local folder. `dest` must be inside `ARTSONIA_OUTPUT_DIR` when set, else `~/Downloads` or `~/Pictures` (`$MCP_DATA_DIR/downloads` when hosted); any other folder is refused before anything is fetched. Optional `path_template: string` (e.g. `\"{grade}/{project}\"` or `\"{school_year}\"`) organizes downloads into subfolders under `dest`, composed with `filename_templa"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"artsonia-mcp\",\n  \"version\": \"1.2.5\",\n  \"publishedAt\": 1791380229707\n}"},{"path":"skill-card.md","content":"## Description:\n\nConnects an agent to Artsonia to view student artwork, comments, and fans and manage account interactions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nParents and fans use an agent to browse linked students' artwork and activity, read comments and feedback, download images, and manage comments, fan invitations, or notifications.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Artsonia credentials and cached sessions grant access to a user's account.\n\nMitigation: Install only if you trust the Artsonia MCP package, protect credentials in the MCP configuration, and review or disable session caching as appropriate.\n\nRisk: Comments, fan invitations, notification changes, and artwork downloads can affect the account or children's artwork privacy.\n\nMitigation: Keep write confirmations enabled and review the preview and destination before approving these actions.\n\n## Reference(s):\n\n- [Artsonia MCP package](https://www.npmjs.com/package/artsonia-mcp)\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/artsonia-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Configuration instructions, Shell commands]\n\n**Output Format:** [Text and Markdown with MCP configuration examples and tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Artwork downloads can produce image files and optional JSON indexes or metadata sidecars.]\n\n## Skill Version(s):\n\n1.2.5 (source: server-resolved release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below). Skill: artsonia-mcp Owner: chrischall Summary: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like \"show me Emma's latest artwork\", \"post a comment on that painting\", \"who are the fans for this student\", \"invite grandma as a fan\", or any","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1223,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T21:47:27.293Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:01:53.437Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}