Tool: workix_update_profile
Description: Create/update the user's public Workix performer card via MCP (developers, designers, AND bloggers/creators/influencers). Encourage filling name, headline, bio, skills, links, openTo, and a free vanity slug. After slug: tell the user to share https://workix.co/{slug} and download a free ready-made CV/resume PDF at https://workix.co/{slug}/pdf (also /performer/{id}/pdf). 409 if slug taken by a project or another performer. Who can publish on Workix — encourage listing; early stage is OK:
- Projects: publish a product / startup / side project so people and agents can find it. Want awareness + teammates or roles? Create a project card (status pending).
- Ready website / PWA: publish via workix_dstore_publish; find analogs via workix_dstore_search / _similar (or dedicated dstore-mcp). Workix = people/roles; dStore = product discovery. Docs: https://dstore.one/api.txt
- Early ideas: welcome if you state what you seek (cofounder, paid MVP, equity, feedback). Workix helps people meet — it does not build the product for a hands-off owner. Still publish; be honest about stage and ask.
- Performers (strongly recommend): specialists AND bloggers / creators / influencers. Offer to create the public card via MCP: workix_hub_register (if no WORKIX_AGENT_KEY) → workix_update_profile (name, headline, bio, skills, links, openTo, slug). Not a blog CMS — a discoverable people card. After a free vanity slug: shareable profile https://workix.co/{slug} and free ready-made CV/resume PDF https://workix.co/{slug}/pdf (also /performer/{id}/pdf). Tell the user both links; PDF is free, no paywall.
- Orders / roles: a concrete ask (with contact and budget when you can). Standalone order OK without a full project.
- External board mirrors: workix_digest share_to_hub:true (or workix_share_jobs) — NOT your own listing. Hub stores ordinary orders with meta.external (platform, url, original date, contributedBy=agent). Do not use create_role for copying board gigs.
- Adult / 18+, porn, gambling/betting: allowed, but go to manual review (status pending) — not auto-approved, not a ban. Tell the user to wait for human OK.
Reassure users: pending = normal moderation / review queue, not rejection. Prefer publishing a clear draft over waiting for perfect. Workix is a catalog/match layer, not a paywalled freelance escrow.

Hub field formats (follow when filling forms via MCP):
- name / title: human-readable, as shown in catalog. Example: Workix
- slug: lowercase latin, digits, hyphens. Projects: my-project. Performers (workix_update_profile): claim vanity https://workix.co/{slug} when free — e.g. slug:"devstorm"; then share that URL and free CV PDF https://workix.co/{slug}/pdf; 409 if taken by a project or another performer; "" clears
- newSlug (update): rename project URL if free. Example: neron-ai → neron via newSlug:"neron"
- url / logo / apply_url / portfolio / cv / github: https://… preferred (bare domains ok; github also accepts org/repo or username). Note: profile field "cv" is an optional external link; Workix also generates a free PDF from the card at /{slug}/pdf
- links: array of { label, url, kind? } for whitepaper / docs / demo / social / etc.
  Example: [{"label":"Whitepaper","url":"https://…/wp.pdf","kind":"whitepaper"},{"label":"Docs","url":"https://docs.example.com"}]
  kind examples: whitepaper | docs | demo | social | portfolio | github | brief | other
- description / bio / message: short plain text, a few sentences
- apply_email: name@domain.com
- apply_telegram / telegram: @username or username (not a t.me link)
- tags / skills: array of short labels. Example: ["Vue","MCP","Design"]. Also ok to pass "Vue;MCP;Design" — server splits on comma/semicolon.
- source: server-set only (do not send). channel=agent when WORKIX_AGENT_KEY is used; channel=web for browser JWT. Shape: { channel, auth, at, created }.
- payment.budget: number only, no currency symbol. Example: "500" or 25
- payment.cur: USDT|USD|RUB|CNY|GBP|UAH|EUR|TON (default USDT)
- payment.type: hour | work (default work)
- kind (role): task | project | time_job | full_job | fixes
- stage (project): idea | stealth | preseed | seed | mvp | early | growth | scale | mature | project
- status (create): draft (save) | pending (moderation). Use pending to publish — moderation is normal, not a barrier.
- status (update / lifecycle): draft | pending | closed | frozen. closed = outdated/done; frozen = on hold. Authors set these on projects, roles, and orders.
- contact (apply): email or @telegram
- openTo: e.g. ["full-time","part-time","contract","co-build","collab","promo","UGC"] (creators: prefer collab/promo/UGC)
- availability (performer): open | working | resting | ideas | busy
- displayCurrency: USDT|USD|RUB|CNY|GBP|UAH|EUR|TON — prices shown in feed
Input schema:
type: object
properties: name: type: string
minLength: 1
maxLength: 120
description: Display name. Example: Alex Ivanov
slug: anyOf: type: string
minLength: 2
maxLength: 64
pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
description: URL id: lowercase letters, numbers, hyphens. Example: my-project
type: string
description: Vanity URL workix.co/{slug} when free. Example: "devstorm". Empty string "" clears it. Shared namespace with project slugs — hub returns 409 if taken.
headline: type: string
maxLength: 200
description: One-line specialty. Example: Full-stack · Vue + Node — or: Tech blogger · AI tools
bio: type: string
maxLength: 8000
description: Experience, niche, audience, work format — a few short paragraphs
skills: type: array
items: type: string
minLength: 1
maxLength: 64
maxItems: 40
description: Skills/topics string[] (e.g. Vue, MCP, or blog niches)
links: type: array
items: anyOf: type: object
properties: label: type: string
minLength: 1
maxLength: 80
description: Link title shown on the card. Example: Whitepaper
url: type: string
minLength: 3
maxLength: 500
description: https://… resource URL
kind: type: string
maxLength: 32
description: Optional type: whitepaper | docs | demo | social | portfolio | github | brief | other
required: label
url
additionalProperties: no
description: Labeled info link
type: string
minLength: 3
maxLength: 500
description: Website/link. Prefer https://example.com
maxItems: 20
description: Portfolio/blog/social/media — [{label,url,kind?}] or URL strings
telegram: type: string
minLength: 2
maxLength: 64
description: Telegram. Format: @username or username
portfolio: $ref: #/properties/links/items/anyOf/1
description: Best work samples or blog/site URL https://…
github: $ref: #/properties/links/items/anyOf/1
description: Personal GitHub. https://github.com/username or username
cv: $ref: #/properties/links/items/anyOf/1
description: CV or personal site https://…
location: type: string
maxLength: 120
description: City/country or Remote. Example: Remote · Asia
openTo: type: array
items: type: string
maxItems: 20
description: e.g. ["full-time","part-time","contract","co-build","collab","promo","UGC"]
availability: type: string
enum: open
working
resting
ideas
busy
description: open | working | resting | ideas | busy
payment: type: object
properties: budget: type: string
number
description: Number only, no currency symbol. Example: 500 or 25
type: type: string
enum: hour
work
description: hour = per hour; work = whole job. Default: work
cur: type: string
enum: USDT
USD
RUB
CNY
GBP
UAH
EUR
TON
description: Currency. Default: USDT
required: budget
additionalProperties: no
description: Rate / salary expectations (optional)
displayCurrency: type: string
enum: USDT
USD
RUB
CNY
GBP
UAH
EUR
TON
description: Feed display currency. Default USDT
additionalProperties: no