Install
openclaw skills install @sprintcx/zoho-social-mcpZoho Social via MCP with action catalog, least-privilege profiles, portal/brand/channel helpers, media upload, and verified draft/schedule workflows. Use whenever a task involves Zoho Social: creating, validating, scheduling, or publishing posts, uploading or listing media library assets, or resolving portals, brands, and channels.
openclaw skills install @sprintcx/zoho-social-mcpUse Zoho Social through an MCP endpoint from mcp.zoho.eu. This skill is the canonical home for Social-specific MCP action documentation and least-privilege action profiles.
Source: sprintberlin/openclaw-zoho-social-mcp-skill
mcp.zoho.eumcporterZOHO_SOCIAL_MCP_URL, --profile, or --mcp-urlscripts/upload_media.py. Keep zoho-attachment-bridge linked; Social MCP currently takes JSON/base64 rather than a dropped format: binary parameter. See Media uploads.Treat the endpoint as a credential. Never print it, commit it, or copy it into tickets, prompts, or chats.
Daily use is the discovery loop. Treat every reusable defect, missing capability, safer check, or useful simplification as a contribution.
gh; link a match or create one.git and gh. See CONTRIBUTING.md.REPO=sprintberlin/openclaw-zoho-social-mcp-skill
gh issue list --repo "$REPO" --state open --search "<terms>"
gh issue create --repo "$REPO" --title "<title>" --body "<sanitized requirement and acceptance criteria>"
python3 -m unittest discover -s tests -v
mcp.zoho.eu.python3 scripts/lookup_actions.py --profiles
python3 scripts/lookup_actions.py --profile social-viewer --names-only
python3 scripts/lookup_actions.py --profile social-creator --names-only
python3 scripts/lookup_actions.py --profile social-publisher --names-only
python3 scripts/lookup_actions.py --profile social-admin --names-only
python3 scripts/lookup_actions.py --task media-asset-management --names-only
python3 scripts/lookup_actions.py --search "draft"
python3 scripts/lookup_actions.py --action uploadSocialMedia
ZOHO_SOCIAL_MCP_URL, or create named profiles using references/MULTI_ACCOUNT.md.mcporter list "$ZOHO_SOCIAL_MCP_URL"
The catalog describes possible Actions. It does not prove that an Action is enabled on a particular MCP server. Runtime tool names usually have the ZohoSocial_ prefix, while the Zoho MCP setup UI uses the Action name without that prefix.
Zoho currently documents 31 Social MCP tools. The catalog in this skill was seeded from a live listing on 2026-09-21.
For one account, set ZOHO_SOCIAL_MCP_URL. For multiple accounts, pass --profile NAME to a bundled helper. Profiles live in ~/.config/zoho-mcp/profiles.json by default and can resolve endpoints through an environment variable, a local URL file, or a direct URL. One-off --mcp-url URL overrides everything, but may expose the credential in shell history or process listings.
Resolution order is --mcp-url, selected profile, then the environment fallback. Profile selection is --profile, ZOHO_SOCIAL_MCP_PROFILE, then ZOHO_MCP_PROFILE. See references/MULTI_ACCOUNT.md.
getSocialPortals. An empty list or USER_INACTIVE_IN_PORTAL means the authenticated user has no Social workspace access. Stop. Do not guess portal or brand IDs.getSocialBrands and getSocialChannels. Never invent IDs.validateSocialPost with the exact post body before create/update/publish/schedule.deleteSocialSchedule disabled unless the task explicitly requires it.Zoho Social MCP can accept image bytes as a JSON string. The live uploadSocialMedia schema requires body.file (complete data:image/png;base64,<COMPLETE_PAYLOAD>) and body.file_name, plus headers portal_id and brand_id. Supported formats: PNG, GIF, JPEG, JPG.
Do not paste base64 into chat. Truncated base64 produces a corrupt library asset while the call can still report success.
python3 scripts/upload_media.py --portal-id <portal_id> --brand-id <brand_id> --file <path>
python3 scripts/upload_media.py --portal-id <portal_id> --brand-id <brand_id> --image-url https://example.com/hero.png
python3 scripts/list_media.py --portal-id <portal_id> --brand-id <brand_id>
The live upload ID arrives in file_path, not id. Treat empty file_path as failure even when status is success. Re-list the library before attaching the ID in media_input. Degenerate images (for example a 1x1 PNG) can return empty fields and never appear in the library.
zoho-attachment-bridge remains required for Books, CRM, Projects, and WorkDrive, where MCP upload tools drop format: binary bytes. Social is different: a real PNG uploaded as a complete data URI lands in the media library. Keep the bridge linked, but do not route Social images through it unless a later live upload reports success with empty file_path and no library asset.
List portals:
cat > /tmp/social_portals.json <<'JSON'
{"headers": {}}
JSON
mcporter call "$ZOHO_SOCIAL_MCP_URL.ZohoSocial_getSocialPortals" --args "$(< /tmp/social_portals.json)"
List brands:
cat > /tmp/social_brands.json <<'JSON'
{"headers": {"portal_id": "PORTAL_ID"}}
JSON
mcporter call "$ZOHO_SOCIAL_MCP_URL.ZohoSocial_getSocialBrands" --args "$(< /tmp/social_brands.json)"
Use the schema shown by the live MCP server when it differs from these examples.
The scripts resolve the endpoint via --mcp-url, --profile (~/.config/zoho-mcp/profiles.json), or ZOHO_SOCIAL_MCP_URL, call mcporter without shell expansion, paginate results, and normalize common Zoho MCP response envelopes.
python3 scripts/list_portals.py
python3 scripts/list_brands.py --portal-id PORTAL_ID --json
python3 scripts/list_channels.py --portal-id PORTAL_ID --brand-id BRAND_ID
python3 scripts/list_drafts.py --portal-id PORTAL_ID --brand-id BRAND_ID --limit 20
python3 scripts/list_schedules.py --portal-id PORTAL_ID --brand-id BRAND_ID
python3 scripts/list_published.py --portal-id PORTAL_ID --brand-id BRAND_ID --network linkedin
python3 scripts/inspect_post.py POST_ID --kind draft --portal-id PORTAL_ID --brand-id BRAND_ID
python3 scripts/list_media.py --portal-id PORTAL_ID --brand-id BRAND_ID
python3 scripts/upload_media.py --portal-id PORTAL_ID --brand-id BRAND_ID --file ./hero.png
Every helper accepts --mcp-url, --profile, --profiles-file, --json, and --timeout. Run any helper with --help without configuring credentials. Unknown or incomplete options exit with status 2.
| Profile | Actions | Fits one MCP server |
|---|---|---|
social-viewer | 16 | yes |
social-creator | 23 | yes |
social-publisher | 30 | yes |
social-admin | 31 | yes |
Start with social-viewer for lookup. Use social-creator for drafts and media. Use social-publisher for scheduling and live publish. Keep social-admin for schedule deletion.
Query the catalog with scripts/lookup_actions.py instead of loading actions.jsonl into context.
ZOHO_SOCIAL_MCP_URL, use --profile, or pass --mcp-url; never print the value.USER_INACTIVE_IN_PORTAL: the authenticated user cannot see a Social workspace. Stop and report it. Do not switch customers.file_path: treat as failure. Re-list the library. File a GitHub issue with sanitized evidence.