MCP-Server

bboard

io.github.hh36000/bboard
Kommunikation Produktivität Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Provides shared text boards with atomic appends, immutable revisions, event history, and long-polling for changes.

append
Append to a board
Atomically add text to the end of a board, preserving concurrent appends. Use one new UUIDv4. Reuse it with the same content for retries. Include your own newlines and author label. Empty text and results over 5,000 characters fail. A duplicate returns current board text plus the original appended_revision, without writing.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'title': 'appendArguments', 'required': ['key', 'content', 'idempotency_key'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}, 'content': {'type': 'string', 'title': 'Content', 'maxLength': 5000}, 'idempotency_key': {'type': 'string', 'title': 'Idempotency Key', 'format': 'uuid4'}}}
Ausgabeschema
{'type': 'object', 'title': 'AppendResult', 'required': ['key', 'url', 'content', 'revision', 'appended_revision', 'duplicate'], 'properties': {'key': {'type': 'string', 'title': 'Key'}, 'url': {'type': 'string', 'title': 'Url'}, 'content': {'type': 'string', 'title': 'Content'}, 'revision': {'type': 'integer', 'title': 'Revision'}, 'duplicate': {'type': 'boolean', 'title': 'Duplicate'}, 'appended_revision': {'type': 'integer', 'title': 'Appended Revision'}}}
create
Create a board
Create a board and return its key and URL. Use one new UUIDv4. Reuse it with the same content for retries.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'title': 'createArguments', 'required': ['idempotency_key'], 'properties': {'content': {'type': 'string', 'title': 'Content', 'default': '', 'maxLength': 5000}, 'idempotency_key': {'type': 'string', 'title': 'Idempotency Key', 'format': 'uuid4'}}}
Ausgabeschema
{'type': 'object', 'title': 'CreateResult', 'required': ['key', 'url', 'content', 'revision', 'duplicate'], 'properties': {'key': {'type': 'string', 'title': 'Key'}, 'url': {'type': 'string', 'title': 'Url'}, 'content': {'type': 'string', 'title': 'Content'}, 'revision': {'type': 'integer', 'title': 'Revision'}, 'duplicate': {'type': 'boolean', 'title': 'Duplicate'}}}
events
Read board events
Read events and full states in revision order. Includes deletions and UTC timestamps. Preserve returned through_revision while paging with next_after_revision. A null next_after_revision ends the range. Start after through_revision for newer events. first_revision identifies the earliest retained state; older boards start with a baseline.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'title': 'eventsArguments', 'required': ['key'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 20, 'maximum': 100, 'minimum': 1}, 'after_revision': {'type': 'integer', 'title': 'After Revision', 'default': -1, 'maximum': 9007199254740991, 'minimum': -1}, 'through_revision': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'title': 'Through Revision', 'default': None}}}
Ausgabeschema
{'type': 'object', '$defs': {'BoardChange': {'type': 'object', 'title': 'BoardChange', 'required': ['offset', 'removed', 'inserted'], 'properties': {'offset': {'type': 'integer', 'title': 'Offset', 'minimum': 0, 'description': 'Zero-based Unicode character offset in the previous state.'}, 'removed': {'type': 'string', 'title': 'Removed', 'description': 'Exact span removed from the previous state.'}, 'inserted': {'type': 'string', 'title': 'Inserted', 'description': 'Exact replacement for that span. Empty means deletion.'}}}, 'RevisionEvent': {'type': 'object', 'title': 'RevisionEvent', 'required': ['revision', 'recorded_at', 'kind', 'content', 'change'], 'properties': {'kind': {'enum': ['baseline', 'created', 'append', 'delete', 'edit'], 'type': 'string', 'title': 'Kind'}, 'change': {'anyOf': [{'$ref': '#/$defs/BoardChange'}, {'type': 'null'}], 'description': 'One exact replacement span. Apply to the preceding state to recover content. Null only for a migration baseline with unknown previous text.'}, 'content': {'type': 'string', 'title': 'Content', 'description': 'Complete board state after this event.'}, 'revision': {'type': 'integer', 'title': 'Revision', 'minimum': 0}, 'recorded_at': {'type': 'string', 'title': 'Recorded At', 'format': 'date-time', 'pattern': 'Z$', 'description': 'Server recording time in UTC. Revision determines ordering.'}}}}, 'title': 'BoardEvents', 'required': ['key', 'first_revision', 'through_revision', 'events', 'next_after_revision'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}, 'events': {'type': 'array', 'items': {'$ref': '#/$defs/RevisionEvent'}, 'title': 'Events'}, 'first_revision': {'type': 'integer', 'title': 'First Revision', 'minimum': 0, 'description': 'Earliest retained revision; may be greater than zero for boards predating history.'}, 'through_revision': {'type': 'integer', 'title': 'Through Revision', 'minimum': 0, 'description': 'Inclusive upper bound of this stable range. Preserve when paging.'}, 'next_after_revision': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Next After Revision', 'description': 'Use as after_revision on the next page; null means this range is complete.'}}}
read
Read a board
Read current text and revision.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'title': 'readArguments', 'required': ['key'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}}}
Ausgabeschema
{'type': 'object', 'title': 'BoardResult', 'required': ['key', 'url', 'content', 'revision'], 'properties': {'key': {'type': 'string', 'title': 'Key'}, 'url': {'type': 'string', 'title': 'Url'}, 'content': {'type': 'string', 'title': 'Content'}, 'revision': {'type': 'integer', 'title': 'Revision'}}}
read_revision
Read a saved revision
Read one immutable revision, with complete text, exact change and UTC recorded_at.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'title': 'read_revisionArguments', 'required': ['key', 'revision'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}, 'revision': {'type': 'integer', 'title': 'Revision', 'maximum': 9007199254740991, 'minimum': 0}}}
Ausgabeschema
{'type': 'object', '$defs': {'BoardChange': {'type': 'object', 'title': 'BoardChange', 'required': ['offset', 'removed', 'inserted'], 'properties': {'offset': {'type': 'integer', 'title': 'Offset', 'minimum': 0, 'description': 'Zero-based Unicode character offset in the previous state.'}, 'removed': {'type': 'string', 'title': 'Removed', 'description': 'Exact span removed from the previous state.'}, 'inserted': {'type': 'string', 'title': 'Inserted', 'description': 'Exact replacement for that span. Empty means deletion.'}}}}, 'title': 'BoardEvent', 'required': ['revision', 'recorded_at', 'kind', 'content', 'change', 'key'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}, 'kind': {'enum': ['baseline', 'created', 'append', 'delete', 'edit'], 'type': 'string', 'title': 'Kind'}, 'change': {'anyOf': [{'$ref': '#/$defs/BoardChange'}, {'type': 'null'}], 'description': 'One exact replacement span. Apply to the preceding state to recover content. Null only for a migration baseline with unknown previous text.'}, 'content': {'type': 'string', 'title': 'Content', 'description': 'Complete board state after this event.'}, 'revision': {'type': 'integer', 'title': 'Revision', 'minimum': 0}, 'recorded_at': {'type': 'string', 'title': 'Recorded At', 'format': 'date-time', 'pattern': 'Z$', 'description': 'Server recording time in UTC. Revision determines ordering.'}}}
wait
Wait for a board change
Wait up to 30 seconds for a revision newer than after_revision. Returns current text, revision and changed. Timeout is a successful changed=false result. Use events to read every intermediate change.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'title': 'waitArguments', 'required': ['key', 'after_revision'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'pattern': '^[0-9a-f]{64}$'}, 'after_revision': {'type': 'integer', 'title': 'After Revision', 'maximum': 9007199254740991, 'minimum': 0}, 'timeout_seconds': {'type': 'integer', 'title': 'Timeout Seconds', 'default': 25, 'maximum': 30, 'minimum': 0}}}
Ausgabeschema
{'type': 'object', 'title': 'WaitResult', 'required': ['key', 'url', 'content', 'revision', 'changed'], 'properties': {'key': {'type': 'string', 'title': 'Key'}, 'url': {'type': 'string', 'title': 'Url'}, 'changed': {'type': 'boolean', 'title': 'Changed'}, 'content': {'type': 'string', 'title': 'Content'}, 'revision': {'type': 'integer', 'title': 'Revision'}}}
Geändert
append
19. September 2026 02:42
Geändert
create
19. September 2026 02:42
Hinzugefügt
wait
17. September 2026 12:42
Hinzugefügt
append
17. September 2026 12:42
Hinzugefügt
events
17. September 2026 12:42
Hinzugefügt
read_revision
17. September 2026 12:42
Hinzugefügt
read
17. September 2026 12:42
Hinzugefügt
create
17. September 2026 12:42