# plyce MCP capabilities

Single URL for every MCP client: https://mcp.plyce.app/mcp

## Can
- get_current_user_context: Return the logged-in plyce user, tenant, scopes, and which tools they may call.
- get_allowed_values: Enums the agent must use (candidate status, pipeline status, activity types).
- get_mcp_connection_status: Show this MCP connection (client, scopes, last seen).
- get_mcp_usage: Show remaining quota for this user in the current window.
- revoke_mcp_connection: Revoke this MCP connection immediately.
- search: Database search over candidates, projects, companies, contacts the user can see.
- fetch: Load one allowlisted record by composite id from search.
- get_candidate: Allowlisted candidate fields plus a plyce deep link.
- get_project: Allowlisted project fields plus a plyce deep link.
- get_company: Allowlisted company fields plus a plyce deep link.
- get_contact: Allowlisted contact fields plus a plyce deep link.
- get_activity_report: Deterministic KPI counts (including contact.sales_call) for a Europe/Berlin period. Same definitions as plyce reporting.
- list_report_activities: List matching activity rows for a report period. Drill-down still requires object rights.
- get_pipeline_report: Counts of Sent out / Interview / Offer on active projects.
- get_time_report: KPI time buckets in Europe/Berlin (not plyce time timesheet approval).
- list_open_tasks: List open manual tasks (mail_automation_scheduled_emails variant task).
- get_daily_briefing: Structured list of open tasks due today/overdue. No plyce-generated prose.
- get_entity_360: Allowlisted record plus recent activity titles (no note bodies from other users beyond title).

## Cannot
- No plyce AI: matching, CV analysis, job-ad analysis, generated email/dossier/briefing prose.
- No SQL, no service-role data path for CRM reads.
- No salary, gender, birth date, CV, or dossier fields.
- No mail send from MCP. prepare_email stores a draft; send is confirmed in plyce.
- No pipeline status or timesheet decision commit from MCP.
- No token passthrough of the plyce browser session.
- get_current_user_context: Not a way to impersonate another user or list other tenants.
- get_allowed_values: Not a search and not a schema dump of the database.
- get_mcp_connection_status: Not an admin dump of every connection in the tenant.
- get_mcp_usage: Not billing and not other users’ usage.
- revoke_mcp_connection: Does not delete CRM data.
- search: Does not rank against a job ad, does not call plyce matching, does not read CVs. The user model ranks locally.
- fetch: Not a SQL proxy and not a document/CV download.
- get_candidate: No salary, gender, birth date, CV text, or dossier.
- get_project: No salary band or full job-ad HTML (user model must not be fed raw ads as a matching engine).
- get_company: Not news scraping or plyce-AI company research.
- get_contact: Not an email send.
- get_activity_report: Does not write prose. Does not call kpi-calculate LLM paths.
- list_report_activities: Not a full activity dump across tenants.
- get_pipeline_report: Does not change pipeline status.
- get_time_report: Does not approve timesheets or create invoices.
- list_open_tasks: Does not complete or send mail.
- get_daily_briefing: Not an LLM summary and not matching.
- get_entity_360: Not a CV or document viewer.
- add_note: Does not generate the note text. plyce only stores it. One canonical activity row.
- create_task: Does not email the assignee and does not log an activity until the task is completed in plyce.
- set_candidate_tags: Does not change pipeline auto-tags.
- update_candidate_availability: Does not run status automation beyond normal DB triggers.
- prepare_email: Does not call plyce-AI to write the mail. Does not send. Does not invoke email-send.

## Example prompts
- Finde Kandidaten für diese Anzeige → search, then the user model ranks hits.
- Wer hat gestern Sales Calls gemacht? → get_activity_report period=yesterday, then list_report_activities event_keys=contact.sales_call.

## Tools
### get_current_user_context

Return the logged-in plyce user, tenant, scopes, and which tools they may call.

Not: Not a way to impersonate another user or list other tenants.

### get_allowed_values

Enums the agent must use (candidate status, pipeline status, activity types).

Not: Not a search and not a schema dump of the database.

### get_mcp_connection_status

Show this MCP connection (client, scopes, last seen).

Not: Not an admin dump of every connection in the tenant.

### get_mcp_usage

Show remaining quota for this user in the current window.

Not: Not billing and not other users’ usage.

### revoke_mcp_connection

Revoke this MCP connection immediately.

Not: Does not delete CRM data.

### search

Database search over candidates, projects, companies, contacts the user can see.

Not: Does not rank against a job ad, does not call plyce matching, does not read CVs. The user model ranks locally.

### fetch

Load one allowlisted record by composite id from search.

Not: Not a SQL proxy and not a document/CV download.

### get_candidate

Allowlisted candidate fields plus a plyce deep link.

Not: No salary, gender, birth date, CV text, or dossier.

### get_project

Allowlisted project fields plus a plyce deep link.

Not: No salary band or full job-ad HTML (user model must not be fed raw ads as a matching engine).

### get_company

Allowlisted company fields plus a plyce deep link.

Not: Not news scraping or plyce-AI company research.

### get_contact

Allowlisted contact fields plus a plyce deep link.

Not: Not an email send.

### get_activity_report

Deterministic KPI counts (including contact.sales_call) for a Europe/Berlin period. Same definitions as plyce reporting.

Not: Does not write prose. Does not call kpi-calculate LLM paths.

### list_report_activities

List matching activity rows for a report period. Drill-down still requires object rights.

Not: Not a full activity dump across tenants.

### get_pipeline_report

Counts of Sent out / Interview / Offer on active projects.

Not: Does not change pipeline status.

### get_time_report

KPI time buckets in Europe/Berlin (not plyce time timesheet approval).

Not: Does not approve timesheets or create invoices.

### list_open_tasks

List open manual tasks (mail_automation_scheduled_emails variant task).

Not: Does not complete or send mail.

### get_daily_briefing

Structured list of open tasks due today/overdue. No plyce-generated prose.

Not: Not an LLM summary and not matching.

### get_entity_360

Allowlisted record plus recent activity titles (no note bodies from other users beyond title).

Not: Not a CV or document viewer.

### add_note

Store a note written by the user model as candidate|contact|company|project.manual_note.

Not: Does not generate the note text. plyce only stores it. One canonical activity row.

### create_task

Create a manual task (same table as the plyce task dialog). Idempotent.

Not: Does not email the assignee and does not log an activity until the task is completed in plyce.

### set_candidate_tags

Replace manual candidate tags. Conflict if updated_at does not match.

Not: Does not change pipeline auto-tags.

### update_candidate_availability

Set candidates.availability text. Conflict on updated_at.

Not: Does not run status automation beyond normal DB triggers.

### prepare_email

Store a client-written subject/body as a draft (MAIL-01: draft). Send only after a human confirms in plyce via email-send.

Not: Does not call plyce-AI to write the mail. Does not send. Does not invoke email-send.
