{
  "schemaVersion": "1.0",
  "item": {
    "slug": "claw2immich",
    "name": "claw2immich",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/JoeRu/claw2immich",
    "canonicalUrl": "https://clawhub.ai/JoeRu/claw2immich",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/claw2immich",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=claw2immich",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "examples/find-by-date.sh",
      "examples/find-people-together.sh",
      "examples/get-photo-urls.sh",
      "skill.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/claw2immich"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/claw2immich",
    "agentPageUrl": "https://openagent3.xyz/skills/claw2immich/agent",
    "manifestUrl": "https://openagent3.xyz/skills/claw2immich/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/claw2immich/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Immich Photo Library (via claw2immich)",
        "body": "Work with your Immich photo library via the claw2immich MCP server. Search by people, dates, locations, and albums. Download photos via shared links or inline base64. 249 tools available from the full Immich OpenAPI spec."
      },
      {
        "title": "Prerequisites",
        "body": "Immich instance running (https://immich.app)\n\n\nclaw2immich MCP server installed and running\n\nRepository: https://github.com/JoeRu/claw2immich\nFollow setup instructions in the repo README\n\n\n\nMCP server configured in config/mcporter.json:\n{\n  \"mcpServers\": {\n    \"immich\": {\n      \"baseUrl\": \"http://your-claw2immich-host:port/sse\"\n    }\n  }\n}"
      },
      {
        "title": "Key Tools",
        "body": "ToolDescriptionimmich_searchassetsMetadata search (date, people, location, etc.)immich_searchsmartCLIP-based natural language searchimmich_searchpersonFind person by nameimmich_getassetinfoGet full asset details including web_urlimmich_viewassetGet thumbnail/preview as base64 (WebP)downloadAssetDownload asset via shared link (default) or inline base64immich_getallpeopleList all peopleimmich_getallalbumsList all albumsimmich_createsharedlinkCreate shared link for album/assetstool_access_reportCheck which tools are available"
      },
      {
        "title": "Find people by name",
        "body": "mcporter call immich immich_searchperson query_name=\"Maria\""
      },
      {
        "title": "Search photos with multiple people (AND logic)",
        "body": "mcporter call immich immich_searchassets \\\n  'body_personIds=[\"person-uuid-1\",\"person-uuid-2\"]' \\\n  body_order=desc body_size=10"
      },
      {
        "title": "CLIP smart search (natural language)",
        "body": "mcporter call immich immich_searchsmart \\\n  body_query=\"sunset at the beach\" body_size=5"
      },
      {
        "title": "Get asset info (includes web_url)",
        "body": "mcporter call immich immich_getassetinfo path_id=<asset-uuid>"
      },
      {
        "title": "Download a photo (shared link)",
        "body": "mcporter call immich downloadAsset asset_id=<asset-uuid>\n\nReturns a short-lived shared link (30 min, no auth needed)."
      },
      {
        "title": "Get thumbnail for display",
        "body": "mcporter call immich immich_viewasset path_id=<asset-uuid> query_size=thumbnail\n\nReturns {encoding: \"base64\", content_type: \"image/webp\", size_bytes: ..., data: \"...\"}."
      },
      {
        "title": "Web URLs",
        "body": "Tool responses for assets, albums, people, and places include a web_url field:\n\nAssets: https://<domain>/photos/<asset-id>\nAlbums: https://<domain>/albums/<album-id>\nPeople: https://<domain>/people/<person-id>\n\nThis requires IMMICH_EXTERNAL_DOMAIN to be configured on the server."
      },
      {
        "title": "\"Show me recent photos of X and Y together\"",
        "body": "Find person IDs:\nmcporter call immich immich_searchperson query_name=\"Alice\"\nmcporter call immich immich_searchperson query_name=\"Bob\"\n\n\n\nSearch photos (AND logic):\nmcporter call immich immich_searchassets \\\n  'body_personIds=[\"alice-id\",\"bob-id\"]' \\\n  body_order=desc body_size=10\n\n\n\nDisplay a photo:\nmcporter call immich immich_viewasset path_id=<asset-id> query_size=thumbnail\n\nDecode base64 data, save as .webp, send to user."
      },
      {
        "title": "\"Find vacation photos from summer 2024\"",
        "body": "mcporter call immich immich_searchassets \\\n  body_createdAfter=\"2024-06-01T00:00:00Z\" \\\n  body_createdBefore=\"2024-08-31T23:59:59Z\" \\\n  body_city=\"Barcelona\" body_order=desc"
      },
      {
        "title": "\"Download a photo\"",
        "body": "mcporter call immich downloadAsset asset_id=<asset-uuid>\n\nResponse:\n\n{\n  \"delivery_mode\": \"shared_link\",\n  \"download_url\": \"https://immich.example.com/share/<token>\",\n  \"expires_in_minutes\": 30,\n  \"requires_auth\": false\n}\n\nThe shared link can be sent directly to users — no auth required."
      },
      {
        "title": "Displaying photos in chat",
        "body": "Get thumbnail via immich_viewasset (query_size=thumbnail, typically < 30KB)\nDecode the base64 data field\nSave as .webp file\nSend via messaging tool\n\nNote: preview size may exceed the 64KB MCP transport limit. Use thumbnail for reliable delivery."
      },
      {
        "title": "immich_searchassets (POST /api/search/assets)",
        "body": "Filtering:\n\nbody_personIds: [\"uuid1\", \"uuid2\"] — Photos with these people (AND)\nbody_city: \"string\" — Filter by city\nbody_country: \"string\" — Filter by country\nbody_createdAfter: \"ISO8601\" — Minimum date\nbody_createdBefore: \"ISO8601\" — Maximum date\nbody_isFavorite: boolean — Only favorites\nbody_albumIds: [\"uuid\"] — Filter by albums\n\nSorting & Pagination:\n\nbody_order: \"desc\" — Newest first\nbody_order: \"asc\" — Oldest first\nbody_size: number — Limit results\nbody_page: number — Page number"
      },
      {
        "title": "immich_searchsmart (POST /api/search/smart)",
        "body": "body_query: \"string\" — Natural language query (CLIP-based)\nbody_size: number — Limit results\nSame filter parameters as searchassets"
      },
      {
        "title": "downloadAsset",
        "body": "asset_id: \"uuid\" — Asset to download\n\nDelivery mode is controlled server-side via IMMICH_DOWNLOAD_ASSET_DELIVERY:\n\nshared_link (default): Returns a tokenized shared link (30 min TTL, no auth)\ninline_base64: Returns base64-encoded file data (limited by 64KB transport)\nimmich_link: Returns direct Immich URL (requires auth)"
      },
      {
        "title": "immich_viewasset (GET /api/assets/{id}/thumbnail)",
        "body": "path_id: \"uuid\" — Asset ID\nquery_size: \"thumbnail\"|\"preview\" — Image size\n\nReturns structured base64 response. Use thumbnail to stay under transport limits."
      },
      {
        "title": "Multi-Person Search (AND)",
        "body": "✅ Correct: Array in body_personIds\n\n{\"body_personIds\": [\"person-1\", \"person-2\"]}\n\n❌ Wrong: Separate calls (that's OR, not AND)"
      },
      {
        "title": "Parameter Prefixes",
        "body": "All OpenAPI tool parameters use prefixes:\n\npath_<name> — Path parameters\nquery_<name> — Query parameters\nbody_<name> — Body parameters (for POST endpoints)"
      },
      {
        "title": "Date Filtering",
        "body": "Always use ISO 8601: \"2024-01-15T00:00:00Z\""
      },
      {
        "title": "64KB Transport Limit",
        "body": "MCP responses are truncated at 64KB. This affects:\n\ndownloadAsset with inline_base64 mode (use shared_link instead)\nimmich_viewasset with query_size=preview (use thumbnail instead)\nLarge search results (reduce body_size)"
      },
      {
        "title": "Access Profiles",
        "body": "Set IMMICH_PROFILE on the server to restrict tools:\n\nread_only — Only GET endpoints (search, browse)\nread_write — Read + write (upload, update, delete)\nfull_scope — Everything including admin\n\nUse tool_access_report to check available tools."
      },
      {
        "title": "Troubleshooting",
        "body": "No results with multiple people:\n\nVerify person IDs (search each person first)\nAdd body_isArchived: false if photos might be archived\n\ndownloadAsset returns error:\n\nCheck tool_access_report for permissions\nShared link creation requires write access to shared-links API\n\nThumbnail too large:\n\nUse query_size=thumbnail instead of preview\nThumbnails are typically 5-25 KB (WebP)\n\nMCP call fails:\n\nVerify server is running: mcporter call immich ping_server\nCheck config: mcporter list immich"
      },
      {
        "title": "Reference",
        "body": "Immich: https://immich.app\nclaw2immich: https://github.com/JoeRu/claw2immich\nImmich API docs: https://immich.app/docs/api/"
      }
    ],
    "body": "Immich Photo Library (via claw2immich)\n\nWork with your Immich photo library via the claw2immich MCP server. Search by people, dates, locations, and albums. Download photos via shared links or inline base64. 249 tools available from the full Immich OpenAPI spec.\n\nPrerequisites\n\nImmich instance running (https://immich.app)\n\nclaw2immich MCP server installed and running\n\nRepository: https://github.com/JoeRu/claw2immich\nFollow setup instructions in the repo README\n\nMCP server configured in config/mcporter.json:\n\n{\n  \"mcpServers\": {\n    \"immich\": {\n      \"baseUrl\": \"http://your-claw2immich-host:port/sse\"\n    }\n  }\n}\n\nKey Tools\nTool\tDescription\nimmich_searchassets\tMetadata search (date, people, location, etc.)\nimmich_searchsmart\tCLIP-based natural language search\nimmich_searchperson\tFind person by name\nimmich_getassetinfo\tGet full asset details including web_url\nimmich_viewasset\tGet thumbnail/preview as base64 (WebP)\ndownloadAsset\tDownload asset via shared link (default) or inline base64\nimmich_getallpeople\tList all people\nimmich_getallalbums\tList all albums\nimmich_createsharedlink\tCreate shared link for album/assets\ntool_access_report\tCheck which tools are available\nQuick Start\nFind people by name\nmcporter call immich immich_searchperson query_name=\"Maria\"\n\nSearch photos with multiple people (AND logic)\nmcporter call immich immich_searchassets \\\n  'body_personIds=[\"person-uuid-1\",\"person-uuid-2\"]' \\\n  body_order=desc body_size=10\n\nCLIP smart search (natural language)\nmcporter call immich immich_searchsmart \\\n  body_query=\"sunset at the beach\" body_size=5\n\nGet asset info (includes web_url)\nmcporter call immich immich_getassetinfo path_id=<asset-uuid>\n\nDownload a photo (shared link)\nmcporter call immich downloadAsset asset_id=<asset-uuid>\n\n\nReturns a short-lived shared link (30 min, no auth needed).\n\nGet thumbnail for display\nmcporter call immich immich_viewasset path_id=<asset-uuid> query_size=thumbnail\n\n\nReturns {encoding: \"base64\", content_type: \"image/webp\", size_bytes: ..., data: \"...\"}.\n\nWeb URLs\n\nTool responses for assets, albums, people, and places include a web_url field:\n\nAssets: https://<domain>/photos/<asset-id>\nAlbums: https://<domain>/albums/<album-id>\nPeople: https://<domain>/people/<person-id>\n\nThis requires IMMICH_EXTERNAL_DOMAIN to be configured on the server.\n\nCommon Workflows\n\"Show me recent photos of X and Y together\"\n\nFind person IDs:\n\nmcporter call immich immich_searchperson query_name=\"Alice\"\nmcporter call immich immich_searchperson query_name=\"Bob\"\n\n\nSearch photos (AND logic):\n\nmcporter call immich immich_searchassets \\\n  'body_personIds=[\"alice-id\",\"bob-id\"]' \\\n  body_order=desc body_size=10\n\n\nDisplay a photo:\n\nmcporter call immich immich_viewasset path_id=<asset-id> query_size=thumbnail\n\n\nDecode base64 data, save as .webp, send to user.\n\n\"Find vacation photos from summer 2024\"\nmcporter call immich immich_searchassets \\\n  body_createdAfter=\"2024-06-01T00:00:00Z\" \\\n  body_createdBefore=\"2024-08-31T23:59:59Z\" \\\n  body_city=\"Barcelona\" body_order=desc\n\n\"Download a photo\"\nmcporter call immich downloadAsset asset_id=<asset-uuid>\n\n\nResponse:\n\n{\n  \"delivery_mode\": \"shared_link\",\n  \"download_url\": \"https://immich.example.com/share/<token>\",\n  \"expires_in_minutes\": 30,\n  \"requires_auth\": false\n}\n\n\nThe shared link can be sent directly to users — no auth required.\n\nDisplaying photos in chat\nGet thumbnail via immich_viewasset (query_size=thumbnail, typically < 30KB)\nDecode the base64 data field\nSave as .webp file\nSend via messaging tool\n\nNote: preview size may exceed the 64KB MCP transport limit. Use thumbnail for reliable delivery.\n\nKey Parameters\nimmich_searchassets (POST /api/search/assets)\n\nFiltering:\n\nbody_personIds: [\"uuid1\", \"uuid2\"] — Photos with these people (AND)\nbody_city: \"string\" — Filter by city\nbody_country: \"string\" — Filter by country\nbody_createdAfter: \"ISO8601\" — Minimum date\nbody_createdBefore: \"ISO8601\" — Maximum date\nbody_isFavorite: boolean — Only favorites\nbody_albumIds: [\"uuid\"] — Filter by albums\n\nSorting & Pagination:\n\nbody_order: \"desc\" — Newest first\nbody_order: \"asc\" — Oldest first\nbody_size: number — Limit results\nbody_page: number — Page number\nimmich_searchsmart (POST /api/search/smart)\nbody_query: \"string\" — Natural language query (CLIP-based)\nbody_size: number — Limit results\nSame filter parameters as searchassets\ndownloadAsset\nasset_id: \"uuid\" — Asset to download\n\nDelivery mode is controlled server-side via IMMICH_DOWNLOAD_ASSET_DELIVERY:\n\nshared_link (default): Returns a tokenized shared link (30 min TTL, no auth)\ninline_base64: Returns base64-encoded file data (limited by 64KB transport)\nimmich_link: Returns direct Immich URL (requires auth)\nimmich_viewasset (GET /api/assets/{id}/thumbnail)\npath_id: \"uuid\" — Asset ID\nquery_size: \"thumbnail\"|\"preview\" — Image size\n\nReturns structured base64 response. Use thumbnail to stay under transport limits.\n\nImportant Patterns\nMulti-Person Search (AND)\n\n✅ Correct: Array in body_personIds\n\n{\"body_personIds\": [\"person-1\", \"person-2\"]}\n\n\n❌ Wrong: Separate calls (that's OR, not AND)\n\nParameter Prefixes\n\nAll OpenAPI tool parameters use prefixes:\n\npath_<name> — Path parameters\nquery_<name> — Query parameters\nbody_<name> — Body parameters (for POST endpoints)\nDate Filtering\n\nAlways use ISO 8601: \"2024-01-15T00:00:00Z\"\n\n64KB Transport Limit\n\nMCP responses are truncated at 64KB. This affects:\n\ndownloadAsset with inline_base64 mode (use shared_link instead)\nimmich_viewasset with query_size=preview (use thumbnail instead)\nLarge search results (reduce body_size)\nAccess Profiles\n\nSet IMMICH_PROFILE on the server to restrict tools:\n\nread_only — Only GET endpoints (search, browse)\nread_write — Read + write (upload, update, delete)\nfull_scope — Everything including admin\n\nUse tool_access_report to check available tools.\n\nTroubleshooting\n\nNo results with multiple people:\n\nVerify person IDs (search each person first)\nAdd body_isArchived: false if photos might be archived\n\ndownloadAsset returns error:\n\nCheck tool_access_report for permissions\nShared link creation requires write access to shared-links API\n\nThumbnail too large:\n\nUse query_size=thumbnail instead of preview\nThumbnails are typically 5-25 KB (WebP)\n\nMCP call fails:\n\nVerify server is running: mcporter call immich ping_server\nCheck config: mcporter list immich\nReference\nImmich: https://immich.app\nclaw2immich: https://github.com/JoeRu/claw2immich\nImmich API docs: https://immich.app/docs/api/"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/JoeRu/claw2immich",
    "publisherUrl": "https://clawhub.ai/JoeRu/claw2immich",
    "owner": "JoeRu",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/claw2immich",
    "downloadUrl": "https://openagent3.xyz/downloads/claw2immich",
    "agentUrl": "https://openagent3.xyz/skills/claw2immich/agent",
    "manifestUrl": "https://openagent3.xyz/skills/claw2immich/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/claw2immich/agent.md"
  }
}