openworkid.org / mcp

MCP Server

A deliberately small interface for maintaining a CV from the agent where the owner already works. Import an existing source once, then read the current record and submit reviewable diffs. Agents cannot approve or publish changes.

4 tools1 public · 3 OAuthAgent maintained · owner approved
01Quickstart

Use the canonical Streamable HTTP endpoint. Public reads need no token; owner tools trigger OAuth consent.

MCP client configuration
{
  "mcpServers": {
    "upstand": {
      "type": "http",
      "url": "https://person.work/api/mcp"
    }
  }
}
02Two owner workflows

The full sync is a deliberately separate first-run operation. Routine maintenance always starts by reading the current record and ends with an owner-reviewed proposal.

Initial import instruction
Read my existing CV from the source I provide. Import identity, profile facts, competencies, and every experience with sync_my_profile. Do not invent facts. If no Upstand profile exists, include identity; the new record must remain private until I publish it.
Ongoing update instruction
Read get_my_career_record first. Preserve stable experience identifiers. Propose only the facts that changed through propose_my_career_change, with a readable diff and the source context. Do not call sync_my_profile for routine maintenance.
04Tool reference
Available now
get_profile({ username, format? })
Publicread-only

Returns one public Career Record whose owner explicitly enabled MCP visibility. Contact values are excluded.

Boundary
Authorizationpublic
Permissionpublic
Safetyread-only
get_my_career_record()
OAuth 2.1read-only

Returns the OAuth-authenticated owner's canonical record. Read this before proposing an ongoing CV update so stable experience identifiers and confirmed facts are preserved.

Boundary
Authorizationoauth:email
Permissioncareer:read
Safetyread-only
propose_my_career_change({ instruction, proposed_patch, diff_summary })
OAuth 2.1write, owner approval required

Adds a structured, human-readable diff to the owner's review inbox. Experience upserts may include a public HTTPS company_logo_url; Upstand imports its own protected copy only after owner approval. Use this for normal maintenance after the initial import; the agent cannot apply or publish it.

Boundary
Authorizationoauth:email profile
Permissionproposal:write
Safetywrite, owner approval required
sync_my_profile({ identity?, profile, experiences[] })
OAuth 2.1destructive import, idempotent

Explicit initial-import operation that atomically creates a private profile when needed or replaces the owner's profile facts and complete experience list. Experiences may include a public HTTPS company_logo_url; Upstand imports a protected copy. Use null to remove a logo and omit the field to preserve it. Identity is required only for first creation. Never use this for routine updates.

Boundary
Authorizationoauth:email profile
Permissionprofile:write
Safetydestructive import, idempotent
05REST fallback

Environments without MCP can read an explicitly shared public profile over HTTPS.

Public REST endpoint
GET https://person.work/api/v1/profiles/{username}

# Fictional example
GET https://person.work/api/v1/profiles/mara-stein?format=summary
06Operational limits
Limit: 100 requests per minute per IP. Profile and verifier email addresses are never returned by the public interface.