mcp-server-groupoffice (VitexSoftware/mcp-server-groupoffice) is an MCP server listed on the M8ven Trust Index. It scores 89 out of 100, grade B. It declares 40 tools. The publisher has proved control of what we score (Verified Publisher). It is connected through the M8ven GitHub App, so the listing is re-checked on every push.

B
Emerging
89/100

Emerging. No concerning findings. Grades remain capped until the project builds reputation through adoption. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored

every push re-verified

Who stands behind it

vitexsoftware.cz (@VitexSoftware) · Verified Publisher

Source: github_app_install · also listed on github_repo_search

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
40 tools verified — handlers match their declared behaviour
21 read-only tools verified — handlers contain no write/delete/exec
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
🔐
You'll be asked for 1 credential: GROUPOFFICE_API_TOKEN
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
Are you the publisher? Confirm or correct these findings.
// tools this server exposes40 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

list_addressbooks

List available address books.

query_contacts

Search contacts. `addressbook_id` is merged into the filter as GroupOffice's `addressBookId` property (confirmed against a live instance's /api/doc.php); pass a raw `filter` dict for anything else.

get_contact

Get a single Contact by ID.

create_contact

Create a new Contact. `data` follows GroupOffice's Contact/set create schema (e.g. firstName, lastName, emailAddresses, addressBookId).

update_contact

Update fields on an existing Contact.

delete_contact

Delete a Contact by ID.

list_calendars

List available calendars.

query_calendar_events

Search calendar events. `calendar_id`/`start` are merged into the filter as GroupOffice's confirmed `calendarId`/`start` properties. Note: CalendarEvent has no `end` property - event length is a `duration` (ISO 8601 duration string, e.g. "PT1H") relative to `start`, not a separate end timestamp. Que

get_calendar_event

Get a single CalendarEvent by ID.

create_calendar_event

Create a new CalendarEvent. `data` follows GroupOffice's CalendarEvent/set create schema (e.g. title, start, duration, calendarId - note "duration" not "end", e.g. duration="PT1H" for a 1-hour event).

update_calendar_event

Update fields on an existing CalendarEvent.

delete_calendar_event

Delete a CalendarEvent by ID.

list_tasklists

List available task lists.

query_tasks

Search tasks. `tasklist_id` is merged into the filter as GroupOffice's confirmed `tasklistId` property (lowercase "l" - not `taskListId`). Completion is tracked via the `percentComplete` property (0-100), not a boolean `completed` field - pass `filter={"percentComplete": 100}` yourself if your insta

get_task

Get a single Task by ID.

create_task

Create a new Task. `data` follows GroupOffice's Task/set create schema (e.g. title, due, tasklistId, responsibleUserId, priority).

update_task

Update fields on an existing Task.

delete_task

Delete a Task by ID.

query_notes

Search notes.

get_note

Get a single Note by ID.

create_note

Create a new Note. `data` follows GroupOffice's Note/set create schema.

update_note

Update fields on an existing Note.

delete_note

Delete a Note by ID.

query_projects

Search projects (GroupOffice Projects v3 module, entity Project3). Note: this module is optional - it returns an error on instances where it isn't installed. Check your instance's /api/doc.php.

get_project

Get a single Project3 record by ID.

create_project

Create a new project. `data` follows GroupOffice's Project3/set create schema (e.g. name, description).

update_project

Update fields on an existing project.

delete_project

Delete a project by ID.

query_comments

List comments attached to a record, e.g. entity='Contact', entity_id='42'. Filtered by GroupOffice's confirmed `entity` (friendly name, not the stored `entityTypeId` int - verified live: querying by `entityTypeId` is rejected as an unsupported filter, while `entity` works) and `entityId` properties.

get_comment

Get a single Comment by ID.

create_comment

Create a new Comment. `data` follows GroupOffice's Comment/set create schema (e.g. entityTypeId, entityId, text).

update_comment

Update fields on an existing Comment.

delete_comment

Delete a Comment by ID.

query_history

List audit-log entries for a record, e.g. entity='Contact', entity_id='42'. GroupOffice's history/audit entity is actually named `LogEntry` (not "History"), filtered by its confirmed `entity` (friendly name)/`entityId` properties - see `query_comments` for details. Read-only and generated automatica

query_users

Search users. Read-only: user administration (create/update/delete) is deliberately not exposed by this server - it is high-privilege and out of scope.

get_user

Get a single User by ID.

query_groups

Search groups. Read-only: group administration is out of scope.

get_group

Get a single Group by ID.

upload_file

Upload a file as a GroupOffice blob. `content_base64` is the raw file content, base64-encoded. Returns a `blob_id` to attach to another entity's create/update `data` (e.g. a Contact photo or a CalendarEvent/Note attachment field).

download_file

Download a GroupOffice blob by ID. Returns base64-encoded content; large files will produce a large response (base64 inflates size by ~33%) - prefer this only for reasonably small attachments.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configGROUPOFFICE_URLBase URL of your GroupOffice instance, e.g. https://groupoffice.example.com
🔐 secretGROUPOFFICE_API_TOKENBearer token from System Settings -> API Keys (requires the "API key generator" community module)
configGROUPOFFICE_VERIFY_SSLVerify TLS certificates
configGROUPOFFICE_TIMEOUTHTTP request timeout, seconds
configGROUPOFFICE_MAX_RETRIESConnection-level retries on transient network errors
configGROUPOFFICE_DEBUGEnable debug logging
configGROUPOFFICE_READONLYrejected before any API call unless you explicitly set =false.
// quality suggestions

Tool test coverage

25/40 tools referenced in tests (63%)

Write tests that reference each tool by name so every tool has at least one test.

// embed badge in your README
[![M8ven Score](https://m8ven.ai/badge/mcp/vitexsoftware/mcp-server-groupoffice)](https://m8ven.ai/mcp/vitexsoftware/mcp-server-groupoffice)
Shows your grade and updates automatically. Prefer no grade? Append ?variant=verified to the badge URL.
commit: 5581a4e59269ec7fb66ae6ab48265db3292ed0b2
code hash: 92d36c74d483ed83cf429d08990932aa398bf635b65eaaef53a316961fdefdb7
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client