Restaurant365 MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Restaurant365 MCP ServerShow me today's sales transactions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Restaurant365 MCP Server — Riviera Dining Group
MCP server for the Restaurant365 OData API (live, near-real-time read access).
Portable Team MCP command
Use this in Cursor Dashboard → Integrations & MCP → Team MCP Servers:
Field | Value |
Name |
|
Type |
|
Command |
|
Args |
|
Environment variables:
Variable | Description |
| Instance subdomain (default: |
| R365 username |
| R365 password |
Aliases also supported: RESTAURANT365_ODATA_USERNAME, RESTAURANT365_ODATA_PASSWORD, RESTAURANT365_DOMAIN.
Username is sent as domain\username per R365 OData requirements.
After saving the Team MCP server, click Add to Team Marketplace so teammates can install it from Customize in the IDE.
Related MCP server: Dynamics 365 Finance & Operations MCP Server
Local config (~/.cursor/mcp.json)
{
"mcpServers": {
"restaurant365": {
"command": "npx",
"args": ["-y", "github:msoutumuro123/r365-mcp-server"],
"env": {
"R365_DOMAIN": "rivieradining",
"R365_USERNAME": "your-user",
"R365_PASSWORD": "your-password"
}
}
}
}Tools
r365_test_connection— Verify live OData connectionr365_list_entities— List available OData viewsr365_list_locations— List all accessible locationsr365_query— Generic OData query with $filter, $select, $topr365_get_transactions— Financial transactionsr365_get_gl_accounts— GL account master datar365_get_employees— Employee recordsr365_get_sales— Sales ticket headers
Build
npm install
npm run buildAvailable Tools
5 toolsr365_get_transactionsGet R365 TransactionsARead-onlyIdempotent
Retrieve financial transactions from Restaurant365.
Args:
location_id: Optional location GUID filter
date: Optional business date filter (ISO 8601, e.g. 2026-06-01T00:00:00Z)
type: Optional transaction type (e.g. 'Journal Entry', 'AP Invoice')
top: Max rows (default 100)
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| date | No | ||
| type | No | ||
| location_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds parameter details like default top=100 but does not disclose additional behaviors such as pagination or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a one-line purpose followed by a structured Args block. Every sentence provides necessary information without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While parameters are well documented, the description lacks any information about the return format or structure of the output. Since there is no output schema, the agent is left guessing what fields are returned. Also, pagination behavior beyond the top parameter is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides clear semantic meaning for each parameter: location_id is a GUID filter, date requires ISO 8601 format with an example, type gives examples, and top states max rows and default. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves financial transactions from Restaurant365. However, it does not differentiate from the sibling tool r365_query, which may also retrieve data, so it lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like r365_query or r365_list_entities. There are no exclusions or context indicating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
r365_list_entitiesList R365 OData EntitiesBRead-onlyIdempotent
List all available Restaurant365 OData entity endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds no behavioral context beyond 'list all available endpoints', which is already implied by the title.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It perfectly fits the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and annotations covering safety, the description is complete. It adequately describes the tool's purpose for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100%. The baseline is 4, and the description does not need to add parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all available OData entity endpoints, using a specific verb and resource. However, it does not distinguish itself from sibling tools like r365_list_locations, which also lists items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as r365_list_locations or r365_query. No exclusions or contexts are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
r365_list_locationsList R365 LocationsCRead-onlyIdempotent
Retrieve all Restaurant365 locations accessible to the configured user.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, idempotentHint true, destructiveHint false, so the agent knows this is a safe read operation. Description adds 'accessible to the configured user,' clarifying scope but not disclosing pagination or behavior for large result sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler. Efficient but omits essential parameter details; conciseness should not come at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no parameter descriptions, and no behavioral details beyond scope. For a list operation, missing info on return format and pagination limits completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the purpose of 'top' or 'filter' parameters. Agent has no guidance on how to use them, a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves all R365 locations for the configured user. Verb 'Retrieve' and resource 'locations' are specific. Siblings are different resources/actions, so purpose is distinguishable without explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like r365_list_entities or r365_query. No context on prerequisites or filtering scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
r365_queryQuery R365 OData EntityARead-onlyIdempotent
Run a read-only OData query against any R365 entity.
Args:
entity: OData view name (Location, Transaction, GlAccount, etc.)
filter: OData $filter expression (e.g. "date ge 2026-01-01T00:00:00Z")
select: OData $select comma-separated fields
orderby: OData $orderby expression
top: Max rows (default 100, max 1000)
skip: Offset for pagination
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| skip | No | ||
| entity | Yes | R365 OData entity/view name. Common: Location, Transaction, GlAccount, Employee, SalesEmployee. | |
| filter | No | ||
| select | No | ||
| orderby | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral details: it uses OData protocol, default top=100, max=1000, and pagination via skip. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: one sentence for purpose, followed by a bullet-list of arguments. No redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter read-only query tool with no output schema, the description covers all param semantics, defaults, and protocol (OData). It doesn't describe the return format, but OData implicitly provides structured JSON responses. Slight gap but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (entity description). The description adds meaning to all params: entity as 'OData view name', filter as '$filter expression', select as '$select comma-separated fields', orderby as '$orderby expression', and specifies defaults and bounds for top and skip. This significantly compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run a read-only OData query against any R365 entity.' This specific verb+resource combination distinguishes it from siblings like r365_list_entities (lists entities) and r365_get_transactions (specific transaction queries).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like r365_get_transactions or r365_list_locations. The description implies it's for generic OData queries but doesn't specify use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
r365_test_connectionTest R365 ConnectionARead-onlyIdempotent
Verify live connection to Restaurant365 OData using configured credentials. Returns location count on success.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, which are consistent with a test tool. The description adds value by specifying the success output ('Returns location count'), providing concrete behavioral insight beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with verb and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description is complete. It explains what it does, what it returns, and the credential dependency. Sibling tools are all different, so no further context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, making schema coverage 100% trivially. The description correctly skips parameter details, and the baseline for 0 parameters is 4. No additional parameter information is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Verify' and the resource 'live connection to Restaurant365 OData'. It distinguishes from sibling tools like r365_list_entities and r365_query, which are for data retrieval, not connection testing. Also specifies what is returned on success ('location count').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to verify a live connection. It doesn't explicitly state when not to use it, but given the distinct purpose and sibling tools, the usage is well implied. The tool requires no parameters, making its invocation straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- First observed
r365_get_transactions - First observed
r365_list_entities - First observed
r365_list_locations - First observed
r365_query - First observed
r365_test_connection
TDQS
Scored across 5 tools
Each tool serves a distinct purpose: connection verification, entity enumeration, location listing, generic querying, and transaction retrieval. No overlap or ambiguity.
All tools follow the 'r365_' prefix and snake_case naming convention. Most use verb_noun pattern (test_connection, list_entities, list_locations, get_transactions), with 'r365_query' being a concise verb form, maintaining overall consistency.
Five tools is appropriate for a read-only OData API server, covering connection testing, schema discovery, location listing, generic querying, and a specific transaction query without being excessive or sparse.
The set provides essential read-only operations: test, list entities, list locations, generic query, and specific transaction query. While a dedicated get-by-ID tool is missing, the generic query can handle it via filters. No write operations are expected per scope.
Maintenance
Related MCP Connectors
Query financial statements, KPIs, ratios, cash forecasts and budgets from your general ledger
Read-only zobrx e-commerce data: P&L, orders, inventory, marketplace, tax & shelf insights.
Read-only NuMetric.work accounting & ERP data: statements, KPIs, reports, invoices, documents.
Read-only access to your Drivara fleet — jobs, drivers, vehicles, fuel, profit & analytics.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides read-only access to TrustLayer's public API, enabling users to query and retrieve data about parties, documents, projects, and other TrustLayer entities through MCP-compatible tools.MIT
- AlicenseNot gradedqualityDmaintenanceProvides a secure gateway to the Dynamics 365 F\&O OData API, enabling LLMs and MCP clients to query and manage entities such as customers, system users, and more.1MIT
- FlicenseAqualityDmaintenanceEnables read-only analytics queries on Acumatica ERP data, including sales orders, inventory, shipments, invoices, purchase orders, customers, and OData generic inquiries.16-
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to Xledger accounting data via GraphQL API for querying invoices, balances, projects, timesheets, and more.2MIT