Serveur MCP

Handover

sh.handover/handover
Connaissance et documentation Productivité Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Creates, versions, searches, annotates, assigns, discusses, publishes, and exchanges shared context artifacts between humans and agents.

handover.annotate
Annotate a handover artifact
Add a durable comment anchored to selected text or lines in an immutable artifact revision. Read the artifact first and preserve the exact quote and surrounding context.
Schéma d’entrée
{'type': 'object', 'required': ['handoverId', 'body', 'target'], 'properties': {'body': {'type': 'string', 'maxLength': 10000, 'minLength': 1, 'description': 'Actionable annotation body in plain text or Markdown.'}, 'target': {'type': 'object', 'required': ['revisionId', 'artifactId', 'targetKind', 'selector'], 'properties': {'selector': {'type': 'object', 'required': ['exact'], 'properties': {'exact': {'type': 'string', 'maxLength': 4000, 'minLength': 1, 'description': 'The exact selected text.'}, 'prefix': {'type': 'string', 'maxLength': 500, 'description': 'Text immediately before the selection.'}, 'suffix': {'type': 'string', 'maxLength': 500, 'description': 'Text immediately after the selection.'}, 'endLine': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based line where the selection ends.'}, 'endOffset': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based character offset immediately after the selection.'}, 'startLine': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based line where the selection starts.'}, 'startOffset': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based character offset where the selection starts.'}}, 'description': 'Exact quote plus optional position and surrounding context.', 'additionalProperties': False}, 'artifactId': {'type': 'string', 'pattern': '^art_', 'description': 'Artifact containing the selected text or code.'}, 'revisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Immutable revision containing the annotated artifact.'}, 'targetKind': {'enum': ['text', 'code', 'html'], 'type': 'string', 'description': 'Rendering context used to relocate and display the annotation.'}}, 'description': 'Immutable artifact location to anchor this annotation.', 'additionalProperties': False}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover containing the artifact being annotated.'}, 'mentionPrincipalIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '^prn_'}, 'maxItems': 20, 'description': 'Collaborator principal IDs to mention and notify.'}}, 'additionalProperties': False}
handover.annotations
Read artifact annotations
Read revision-anchored file comments, selected text, status, authorship, and resolution metadata. Use status=open to find feedback that still needs action.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['handoverId'], 'properties': {'status': {'enum': ['open', 'resolved', 'stale'], 'type': 'string'}, 'artifactId': {'type': 'string', 'pattern': '^art_'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover whose annotation threads should be read.'}, 'revisionId': {'type': 'string', 'pattern': '^rev_'}}, 'additionalProperties': False}
handover.assign
Set handover owners
Replace the open assignments with the supplied collaborator identities. This changes collaboration state, not the immutable handover revision.
Schéma d’entrée
{'type': 'object', 'required': ['handoverId', 'principalIds'], 'properties': {'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover whose open assignments will be replaced.'}, 'principalIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '^prn_'}, 'maxItems': 20, 'description': 'Complete replacement list of assigned collaborator principal IDs.'}}, 'additionalProperties': False}
handover.comment
Comment on a handover
Append a discussion comment and optionally notify explicitly mentioned collaborators.
Schéma d’entrée
{'type': 'object', 'required': ['handoverId', 'body'], 'properties': {'body': {'type': 'string', 'maxLength': 10000, 'minLength': 1, 'description': 'Comment body in plain text or Markdown.'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover discussion to append the comment to.'}, 'mentionPrincipalIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '^prn_'}, 'maxItems': 20, 'description': 'Collaborator principal IDs to mention and notify.'}}, 'additionalProperties': False}
handover.continue
Continue a handover
Append an immutable revision after reading the current snapshot. expectedRevisionId is mandatory to prevent overwriting another collaborator's work. Omitted artifacts are inherited; matching names are replaced.
Schéma d’entrée
{'type': 'object', 'anyOf': [{'required': ['note']}, {'required': ['brief']}, {'required': ['artifacts']}], 'required': ['handoverId', 'expectedRevisionId'], 'properties': {'note': {'type': 'string', 'minLength': 1, 'description': 'What changed or what the next collaborator should know.'}, 'brief': {'type': 'object', 'properties': {'decisions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'description': 'Decisions already made that successors should preserve.'}, 'nextSteps': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional stable identifier for this step.'}, 'text': {'type': 'string', 'description': 'One actionable continuation step.'}, 'status': {'enum': ['open', 'done'], 'type': 'string', 'description': 'Whether the step still needs action.'}}, 'additionalProperties': False}, 'maxItems': 50, 'description': 'Concrete continuation steps for the receiving actor.'}, 'objective': {'type': 'string', 'description': 'The outcome the next human or agent should continue toward.'}, 'currentState': {'type': 'string', 'description': 'Verified state at the moment this revision is published.'}, 'openQuestions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'description': 'Unresolved questions that still require evidence or judgment.'}}, 'description': 'Updated structured continuation brief.', 'minProperties': 1, 'additionalProperties': False}, 'artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Filename shown in Handover.'}, 'content': {'type': 'string', 'description': 'UTF-8 text, or base64 when encoding is base64.'}, 'encoding': {'enum': ['utf-8', 'base64'], 'type': 'string', 'default': 'utf-8'}, 'mediaType': {'type': 'string', 'description': 'IANA media type, such as text/markdown or text/x-sql.'}}, 'additionalProperties': False}, 'maxItems': 50, 'minItems': 1, 'description': 'New or replacement files; omitted files remain inherited.'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover to continue after reading its current snapshot.'}, 'expectedRevisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Current revision ID returned by handover.get; prevents lost updates.'}}, 'additionalProperties': False}
handover.create
Create a handover
Create durable shared context with an initial immutable revision. Authorship comes from the authenticated Handover identity.
Schéma d’entrée
{'type': 'object', 'anyOf': [{'required': ['note']}, {'required': ['brief']}, {'required': ['artifacts']}], 'required': ['title'], 'properties': {'note': {'type': 'string', 'minLength': 1, 'description': 'Free-form continuation note recorded in the initial revision.'}, 'brief': {'type': 'object', 'properties': {'decisions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'description': 'Decisions already made that successors should preserve.'}, 'nextSteps': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional stable identifier for this step.'}, 'text': {'type': 'string', 'description': 'One actionable continuation step.'}, 'status': {'enum': ['open', 'done'], 'type': 'string', 'description': 'Whether the step still needs action.'}}, 'additionalProperties': False}, 'maxItems': 50, 'description': 'Concrete continuation steps for the receiving actor.'}, 'objective': {'type': 'string', 'description': 'The outcome the next human or agent should continue toward.'}, 'currentState': {'type': 'string', 'description': 'Verified state at the moment this revision is published.'}, 'openQuestions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 50, 'description': 'Unresolved questions that still require evidence or judgment.'}}, 'description': 'Structured continuation brief for humans and agents.', 'minProperties': 1, 'additionalProperties': False}, 'title': {'type': 'string', 'maxLength': 200, 'description': 'Short, specific name for the durable context.'}, 'summary': {'type': 'string', 'maxLength': 2000, 'description': 'Concise explanation of what this handover contains.'}, 'artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Filename shown in Handover.'}, 'content': {'type': 'string', 'description': 'UTF-8 text, or base64 when encoding is base64.'}, 'encoding': {'enum': ['utf-8', 'base64'], 'type': 'string', 'default': 'utf-8'}, 'mediaType': {'type': 'string', 'description': 'IANA media type, such as text/markdown or text/x-sql.'}}, 'additionalProperties': False}, 'maxItems': 50, 'minItems': 1, 'description': 'Files attached to the initial immutable revision.'}}, 'additionalProperties': False}
handover.get
Inspect a handover
Read a handover snapshot, continuation brief, artifact metadata, and revision history. Omit revisionId for the current snapshot.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['handoverId'], 'properties': {'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover identifier returned by handover.search or handover.create.'}, 'revisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Optional immutable revision; omit to inspect the current revision.'}}, 'additionalProperties': False}
handover.okf.export
Export a handover as OKF
Export a handover revision as an Open Knowledge Format bundle for another human or agent system.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['handoverId'], 'properties': {'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover to export.'}, 'revisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Immutable revision to export; defaults to the current revision.'}}, 'additionalProperties': False}
handover.okf.import
Import an OKF bundle
Import Open Knowledge Format files into a new immutable Handover revision. Replaying the same bundle is idempotent.
Schéma d’entrée
{'type': 'object', 'required': ['handoverId', 'files'], 'properties': {'mode': {'enum': ['merge', 'replace'], 'type': 'string', 'default': 'merge', 'description': 'Merge bundle files with inherited artifacts or replace them.'}, 'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'description': 'Relative path of this file inside the OKF bundle.'}, 'content': {'type': 'string', 'description': 'UTF-8 text, or base64 when encoding is base64.'}, 'encoding': {'enum': ['utf-8', 'base64'], 'type': 'string', 'description': 'How content is encoded in this request.'}, 'mediaType': {'type': 'string', 'description': 'IANA media type; inferred from path when omitted.'}}, 'additionalProperties': False}, 'maxItems': 100, 'minItems': 1, 'description': 'Files from an Open Knowledge Format bundle.'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Existing handover that will receive the imported bundle.'}, 'expectedRevisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Current revision ID used to prevent conflicting imports.'}}, 'additionalProperties': False}
handover.publication
Inspect a published report
Read the stable report URL, entry file, access mode, and selected revision for a handover.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'anyOf': [{'required': ['handoverId']}, {'required': ['slug']}], 'properties': {'slug': {'type': 'string', 'description': 'Stable published report slug.'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover whose publication should be inspected.'}}, 'additionalProperties': False}
handover.publish
Publish a handover as a report
Create or update a stable /r/{slug}/ report projection of a Handover revision.
Schéma d’entrée
{'type': 'object', 'required': ['handoverId'], 'properties': {'slug': {'type': 'string', 'description': 'Stable URL slug; generated from the title when omitted.'}, 'access': {'enum': ['organization', 'public'], 'type': 'string', 'description': 'Who can open the report URL.'}, 'entryPath': {'type': 'string', 'description': 'Artifact path opened first when readers visit the report.'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover to project as a stable report.'}, 'revisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Revision to pin; used when revisionMode is pinned.'}, 'revisionMode': {'enum': ['latest', 'pinned'], 'type': 'string', 'description': 'Follow new revisions automatically or keep one revision pinned.'}}, 'additionalProperties': False}
handover.pull
Pull a published report
Return the selected files of a published report with paths, hashes, media types, and UTF-8 or base64 content.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Stable published report slug.'}, 'files': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 100, 'description': 'Optional relative paths to return; omit for every file.'}, 'includeBinary': {'type': 'boolean', 'default': False, 'description': 'Return binary files as base64 when true.'}}, 'additionalProperties': False}
handover.read_artifact
Read a handover artifact
Read bounded artifact content after inspecting a handover. Text is returned as UTF-8 and binary content as base64; truncated results report that explicitly.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['artifactId'], 'properties': {'maxBytes': {'type': 'integer', 'default': 524288, 'maximum': 2097152, 'minimum': 1, 'description': 'Maximum decoded bytes to return before reporting truncation.'}, 'artifactId': {'type': 'string', 'pattern': '^art_', 'description': 'Artifact identifier returned by handover.get.'}}, 'additionalProperties': False}
handover.search
Search handovers
Find current shared context with hybrid, semantic, or lexical retrieval across metadata and artifact content. Use an empty query to list recent handovers.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'mode': {'enum': ['hybrid', 'semantic', 'lexical'], 'type': 'string', 'default': 'hybrid'}, 'limit': {'type': 'integer', 'default': 30, 'maximum': 100, 'minimum': 1}, 'query': {'type': 'string'}, 'cursor': {'type': 'string'}, 'status': {'enum': ['active', 'archived', 'trashed'], 'type': 'string', 'default': 'active'}}, 'additionalProperties': False}
handover.thread
Read a handover discussion
Read comments, explicit mentions, assignments, and eligible collaborators without changing revision history.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['handoverId'], 'properties': {'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover whose discussion and assignments should be read.'}}, 'additionalProperties': False}
handover.update_comment
Edit or resolve a comment
Edit an authored comment, or resolve/reopen an annotation. Set resolvedRevisionId when a new handover revision addressed the feedback.
Schéma d’entrée
{'type': 'object', 'required': ['handoverId', 'commentId'], 'properties': {'body': {'type': 'string', 'maxLength': 10000, 'minLength': 1, 'description': 'Replacement comment body; omit to preserve the current body.'}, 'status': {'enum': ['open', 'resolved'], 'type': 'string', 'description': 'Open, resolve, or reopen the feedback thread.'}, 'target': {'anyOf': [{'type': 'object', 'required': ['revisionId', 'artifactId', 'targetKind', 'selector'], 'properties': {'selector': {'type': 'object', 'required': ['exact'], 'properties': {'exact': {'type': 'string', 'maxLength': 4000, 'minLength': 1, 'description': 'The exact selected text.'}, 'prefix': {'type': 'string', 'maxLength': 500, 'description': 'Text immediately before the selection.'}, 'suffix': {'type': 'string', 'maxLength': 500, 'description': 'Text immediately after the selection.'}, 'endLine': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based line where the selection ends.'}, 'endOffset': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based character offset immediately after the selection.'}, 'startLine': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based line where the selection starts.'}, 'startOffset': {'type': 'integer', 'minimum': 0, 'description': 'Zero-based character offset where the selection starts.'}}, 'description': 'Exact quote plus optional position and surrounding context.', 'additionalProperties': False}, 'artifactId': {'type': 'string', 'pattern': '^art_', 'description': 'Artifact containing the selected text or code.'}, 'revisionId': {'type': 'string', 'pattern': '^rev_', 'description': 'Immutable revision containing the annotated artifact.'}, 'targetKind': {'enum': ['text', 'code', 'html'], 'type': 'string', 'description': 'Rendering context used to relocate and display the annotation.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Replacement annotation target, or null to remove the anchor.'}, 'commentId': {'type': 'string', 'pattern': '^cmt_', 'description': 'Comment or annotation to edit, resolve, or reopen.'}, 'handoverId': {'type': 'string', 'pattern': '^hov_', 'description': 'Handover containing the comment.'}, 'resolvedRevisionId': {'anyOf': [{'type': 'string', 'pattern': '^rev_'}, {'type': 'null'}], 'description': 'Revision that addressed the feedback, or null when reopening.'}, 'mentionPrincipalIds': {'type': 'array', 'items': {'type': 'string', 'pattern': '^prn_'}, 'maxItems': 20, 'description': 'Replacement collaborator mentions.'}}, 'minProperties': 3, 'additionalProperties': False}
handover.whoami
Verify the active identity
Return the authenticated person or service agent, organization, workspace, role, and granted scopes. Call this before reading or publishing to confirm attribution and tenancy.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ajouté
handover.okf.import
17 September 2026 12:55
Ajouté
handover.okf.export
17 September 2026 12:55
Ajouté
handover.pull
17 September 2026 12:55
Ajouté
handover.publication
17 September 2026 12:55
Ajouté
handover.publish
17 September 2026 12:55
Ajouté
handover.assign
17 September 2026 12:55
Ajouté
handover.update_comment
17 September 2026 12:55
Ajouté
handover.annotate
17 September 2026 12:55
Ajouté
handover.comment
17 September 2026 12:55
Ajouté
handover.continue
17 September 2026 12:55
Ajouté
handover.create
17 September 2026 12:55
Ajouté
handover.annotations
17 September 2026 12:55
Ajouté
handover.thread
17 September 2026 12:55
Ajouté
handover.read_artifact
17 September 2026 12:55
Ajouté
handover.get
17 September 2026 12:55
Ajouté
handover.search
17 September 2026 12:55
Ajouté
handover.whoami
17 September 2026 12:55