Skip to main content
Glama
msoutumuro123

Restaurant365 MCP Server

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

restaurant365

Type

stdio

Command

npx

Args

-y, github:msoutumuro123/r365-mcp-server

Environment variables:

Variable

Description

R365_DOMAIN

Instance subdomain (default: rivieradining)

R365_USERNAME

R365 username

R365_PASSWORD

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 connection

  • r365_list_entities — List available OData views

  • r365_list_locations — List all accessible locations

  • r365_query — Generic OData query with $filter, $select, $top

  • r365_get_transactions — Financial transactions

  • r365_get_gl_accounts — GL account master data

  • r365_get_employees — Employee records

  • r365_get_sales — Sales ticket headers

Build

npm install
npm run build

Available Tools

5 tools
r365_get_transactionsGet R365 TransactionsA
Read-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)

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
dateNo
typeNo
location_idNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 EntitiesB
Read-onlyIdempotent

List all available Restaurant365 OData entity endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 LocationsC
Read-onlyIdempotent

Retrieve all Restaurant365 locations accessible to the configured user.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
filterNo

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 EntityA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
skipNo
entityYesR365 OData entity/view name. Common: Location, Transaction, GlAccount, Employee, SalesEmployee.
filterNo
selectNo
orderbyNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 ConnectionA
Read-onlyIdempotent

Verify live connection to Restaurant365 OData using configured credentials. Returns location count on success.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv1.0.0
    • First observedr365_get_transactions
    • First observedr365_list_entities
    • First observedr365_list_locations
    • First observedr365_query
    • First observedr365_test_connection

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool serves a distinct purpose: connection verification, entity enumeration, location listing, generic querying, and transaction retrieval. No overlap or ambiguity.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides 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
  • F
    license
    A
    quality
    D
    maintenance
    Enables read-only analytics queries on Acumatica ERP data, including sales orders, inventory, shipments, invoices, purchase orders, customers, and OData generic inquiries.
    16
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides read-only access to Xledger accounting data via GraphQL API for querying invoices, balances, projects, timesheets, and more.
    2
    MIT