OfficeRnD MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.4 · published by io.usefulapi
Browse OfficeRnD members, bookings, memberships, invoices and tickets, with optional write access.
20 tools: 5 can delete or cancel things and 15 only read.
Scanned Oct 22, 2026
- Deletes or cancels5Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads15Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http officernd https://officernd.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The description mentions "credentials".
What this check looks forMatched text
description: "Fetch the OfficeRnD organization these credentials belong to — name, slug and region. A ch..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
20 tools
Deletes or cancels 5Claude Code: deny
officernd_add_ticket_commentWRITE.Can send data outNo findings
Why it is in this group
- The name "officernd_add_ticket_comment" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- outboundThe name "officernd_add_ticket_comment" says "add" and "comment": it writes something other people read.
Description, as the server wrote it WRITE. Post a comment on a helpdesk ticket. Public comments are visible to the member; comments attributed to members must be public. Needs scope flex.collaboration.ticketComments.create. OfficeRnD: POST /ticket-comments/{ticketId}.
Annotations the server declares
- title: Comment on a ticket
- destructiveHint: true
officernd_create_bookingWRITE.No findings
Why it is in this group
- The name "officernd_create_booking" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE. Book a resource (e.g. a meeting room) for a member and/or company. Unless is_free or is_tentative is set, the booking is charged per the resource's rate, and the member is notified unless is_silent. Needs scope flex.space.bookings.create. OfficeRnD: POST /bookings.
Annotations the server declares
- title: Create a booking
- destructiveHint: true
officernd_create_memberWRITE.No findings
Why it is in this group
- The name "officernd_create_member" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE. Add a new member (person) to a location, optionally attached to a company. Needs scope flex.community.members.create. OfficeRnD: POST /members.
Annotations the server declares
- title: Create a member
- destructiveHint: true
officernd_create_ticketWRITE.No findings
Why it is in this group
- The name "officernd_create_ticket" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE. Open a helpdesk ticket on behalf of a member. type, priority and severity are ticket-option _ids from officernd_list_ticket_options. Needs scope flex.collaboration.tickets.create. OfficeRnD: POST /tickets.
Annotations the server declares
- title: Open a helpdesk ticket
- destructiveHint: true
officernd_update_memberWRITE.No findings
Why it is in this group
- The name "officernd_update_member" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE. Update a member's name, email, phone, start date, billing/contact flags, tags or custom properties. Only the fields you pass are changed; `tags` replaces the whole tag list. Needs scope flex.community.members.update. OfficeRnD: PUT /members/{memberId}.
Annotations the server declares
- title: Update a member
- destructiveHint: true
Only reads 15Claude Code: allow
officernd_get_bookingFetch one booking by _id — resource, member/company, times, recurrence rule, fees, extras, visitors and status.No findings
Why it is in this group
- The name "officernd_get_booking" says "get": a word for reading.
Description, as the server wrote it Fetch one booking by _id — resource, member/company, times, recurrence rule, fees, extras, visitors and status. OfficeRnD: GET /bookings/{bookingId}.
Annotations the server declares
- title: Get one booking
- readOnlyHint: true
officernd_get_memberFetch one member by _id — contact details, company, location, status, billing details and custom properties.Reads private dataNo findings
Why it is in this group
- The name "officernd_get_member" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "fetch" and "contact": it reads contacts.
Description, as the server wrote it Fetch one member by _id — contact details, company, location, status, billing details and custom properties. OfficeRnD: GET /members/{memberId}.
Annotations the server declares
- title: Get one member
- readOnlyHint: true
officernd_get_organizationFetch the OfficeRnD organization these credentials belong to — name, slug and region.Reads private data1 finding
Why it is in this group
- The name "officernd_get_organization" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "fetch" and "credential": it reads secrets.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "Fetch the OfficeRnD organization these credentials belong to — name, slug and region. A ch..."
Description, as the server wrote it Fetch the OfficeRnD organization these credentials belong to — name, slug and region. A cheap way to confirm the setup works. OfficeRnD: GET /api/v2/organizations/{orgSlug}.
Annotations the server declares
- title: Get the organization
- readOnlyHint: true
officernd_list_booking_occurrencesList every individual booking occurrence between two times — one-off bookings plus each expanded instance of recurring series.No findings
Why it is in this group
- The name "officernd_list_booking_occurrences" says "list": a word for reading.
Description, as the server wrote it List every individual booking occurrence between two times — one-off bookings plus each expanded instance of recurring series. The right tool for calendars, room availability and utilisation. Without pagination the window may be at most 1 year. OfficeRnD: GET /bookings/occurrences.
Annotations the server declares
- title: List booking occurrences
- readOnlyHint: true
officernd_list_bookingsList bookings: one entry per one-off booking and one per recurring series (first instance only).No findings
Why it is in this group
- The name "officernd_list_bookings" says "list": a word for reading.
Description, as the server wrote it List bookings: one entry per one-off booking and one per recurring series (first instance only). Filter by member, company, location, resource, series start window and status. For every individual occurrence in a date window use officernd_list_booking_occurrences. OfficeRnD: GET /bookings.
Annotations the server declares
- title: List bookings
- readOnlyHint: true
officernd_list_checkinsList member check-ins (who was on site, when, and via which booking or pass) — useful for occupancy and attendance.No findings
Why it is in this group
- The name "officernd_list_checkins" says "list": a word for reading.
Description, as the server wrote it List member check-ins (who was on site, when, and via which booking or pass) — useful for occupancy and attendance. OfficeRnD: GET /checkins.
Annotations the server declares
- title: List check-ins
- readOnlyHint: true
officernd_list_companiesList companies (teams/tenants renting space), filterable by exact name or _id, location and status.No findings
Why it is in this group
- The name "officernd_list_companies" says "list": a word for reading.
Description, as the server wrote it List companies (teams/tenants renting space), filterable by exact name or _id, location and status. OfficeRnD: GET /companies.
Annotations the server declares
- title: List companies
- readOnlyHint: true
officernd_list_contractsList contracts (agreements for plans and resources) with totals, dates, notice period, status and lifecycle stage — e.g.No findings
Why it is in this group
- The name "officernd_list_contracts" says "list": a word for reading.
Description, as the server wrote it List contracts (agreements for plans and resources) with totals, dates, notice period, status and lifecycle stage — e.g. find contracts up for renewal or serving notice. OfficeRnD: GET /contracts.
Annotations the server declares
- title: List contracts
- readOnlyHint: true
officernd_list_locationsList the organization's locations (coworking spaces/buildings) with address, timezone and open/public flags.No findings
Why it is in this group
- The name "officernd_list_locations" says "list": a word for reading.
Description, as the server wrote it List the organization's locations (coworking spaces/buildings) with address, timezone and open/public flags. Location _ids are needed by most other filters and by officernd_create_member. OfficeRnD: GET /locations.
Annotations the server declares
- title: List locations
- readOnlyHint: true
officernd_list_membersList members (people) of the workspace, filterable by exact email or name, location, company, status and creation/modification date.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "officernd_list_members" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it List members (people) of the workspace, filterable by exact email or name, location, company, status and creation/modification date. OfficeRnD: GET /members.
Annotations the server declares
- title: List members
- readOnlyHint: true
officernd_list_membershipsList memberships (recurring plans sold to members/companies) with plan, price, discount, start/end dates and calculated status.No findings
Why it is in this group
- The name "officernd_list_memberships" says "list": a word for reading.
Description, as the server wrote it List memberships (recurring plans sold to members/companies) with plan, price, discount, start/end dates and calculated status. OfficeRnD: GET /memberships.
Annotations the server declares
- title: List memberships
- readOnlyHint: true
officernd_list_paymentsList billing documents — invoices, credit notes, overpayments — with totals, paid/pending amounts, due dates and status.Reads private dataNo findings
Why it is in this group
- The name "officernd_list_payments" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "document": it reads documents.
Description, as the server wrote it List billing documents — invoices, credit notes, overpayments — with totals, paid/pending amounts, due dates and status. Filter by member, company, location, document type, status, number and issue/due date (e.g. overdue invoices). OfficeRnD: GET /payments.
Annotations the server declares
- title: List invoices and payments
- readOnlyHint: true
officernd_list_resourcesList bookable/assignable resources — meeting rooms, desks, hot desks, private offices — with capacity, price, rate, floor and amenities.Reads private dataNo findings
Why it is in this group
- The name "officernd_list_resources" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "meeting": it reads calendars.
Description, as the server wrote it List bookable/assignable resources — meeting rooms, desks, hot desks, private offices — with capacity, price, rate, floor and amenities. Resource _ids are needed by officernd_create_booking. OfficeRnD: GET /resources.
Annotations the server declares
- title: List resources
- readOnlyHint: true
officernd_list_ticket_optionsList the helpdesk ticket options — the configured types, priorities and severities (each with an _id, category and label).Reads text others writeNo findings
Why it is in this group
- The name "officernd_list_ticket_options" says "list": a word for reading.
What it can reach
- untrusted-inputThe name "officernd_list_ticket_options" says "list" and "ticket": it reads issues, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "ticket": it reads issues, which other people can write.
Description, as the server wrote it List the helpdesk ticket options — the configured types, priorities and severities (each with an _id, category and label). Their _ids are required by officernd_create_ticket. OfficeRnD: GET /ticket-options.
Annotations the server declares
- title: List ticket options
- readOnlyHint: true
officernd_list_ticketsList helpdesk tickets (member requests/issues) with subject, message, status (open/new/pending/resolved), priority, severity and assignee.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "officernd_list_tickets" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "list" and "message": it reads messages.
- untrusted-inputThe name "officernd_list_tickets" says "list" and "ticket": it reads issues, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "ticket": it reads issues, which other people can write.
Description, as the server wrote it List helpdesk tickets (member requests/issues) with subject, message, status (open/new/pending/resolved), priority, severity and assignee. OfficeRnD: GET /tickets.
Annotations the server declares
- title: List helpdesk tickets
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
18 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data6
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write3
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__officernd__officernd_add_ticket_comment"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 15:30 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 5
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- none
- RFC 9728 protected resource metadata
- https://officernd.usefulapi.io/.well-known/oauth-protected-resource/mcp
- Authorization servers
- https://officernd.usefulapi.io
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- yes
- Client ID metadata documents
- no
- HighThe whole server
The endpoint served tools/list without credentials, and the list has 5 tools that change things (5 destructive). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://officernd.usefulapi.io/mcp: tools/list returned 20 tools to an anonymous client, including officernd_create_member (destructive), officernd_update_member (destructive), officernd_create_booking (destructive), officernd_create_ticket (destructive), officernd_add_ticket_comment (destructive)
Install
Pinned to version 1.16.4. Values in angle brackets are yours to fill in.
claude mcp add --transport http officernd https://officernd.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__officernd__officernd_get_organization",
"mcp__officernd__officernd_list_locations",
"mcp__officernd__officernd_list_members",
"mcp__officernd__officernd_get_member",
"mcp__officernd__officernd_list_companies",
"mcp__officernd__officernd_list_resources",
"mcp__officernd__officernd_list_bookings",
"mcp__officernd__officernd_list_booking_occurrences",
"mcp__officernd__officernd_get_booking",
"mcp__officernd__officernd_list_memberships",
"mcp__officernd__officernd_list_contracts",
"mcp__officernd__officernd_list_checkins",
"mcp__officernd__officernd_list_payments",
"mcp__officernd__officernd_list_tickets",
"mcp__officernd__officernd_list_ticket_options"
],
"ask": [],
"deny": [
"mcp__officernd__officernd_create_member",
"mcp__officernd__officernd_update_member",
"mcp__officernd__officernd_create_booking",
"mcp__officernd__officernd_create_ticket",
"mcp__officernd__officernd_add_ticket_comment"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as officernd. Review it before you use it.
Capability tags behind 8 rules
- mcp__officernd__officernd_get_organization private-data
- mcp__officernd__officernd_list_members private-data, untrusted-input
- mcp__officernd__officernd_get_member private-data
- mcp__officernd__officernd_list_resources private-data
- mcp__officernd__officernd_list_payments private-data
- mcp__officernd__officernd_list_tickets private-data, untrusted-input
- mcp__officernd__officernd_list_ticket_options untrusted-input
- mcp__officernd__officernd_add_ticket_comment outbound