ExpenseOnDemand MCP by usefulapi
Read exports, payroll totals and users; add, update or deactivate employees in ExpenseOnDemand.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (18)
- HIGH
- MEDIUMin expenseondemand_list_expense_categories
- MEDIUMin expenseondemand_list_customers
- MEDIUMin expenseondemand_add_customer
- MEDIUMin expenseondemand_update_customer
- MEDIUMin expenseondemand_list_cost_centres
- MEDIUMin expenseondemand_add_cost_centre
- MEDIUMin expenseondemand_update_cost_centre
- LOWin expenseondemand_export_accounting
- LOWin expenseondemand_get_payroll_export
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"expenseondemand": {
"url": "https://expenseondemand.usefulapi.io/mcp"
}
}
}Remote-Endpunkte
https://expenseondemand.usefulapi.io/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (15)
🟢expenseondemand_export_accounting(exportReportId, exportType, fromDate, toDate, expenseCategoryFilter, ...)
Fetch approved expense data for an accounting integration, filtered by report, date range, category, claimant, cost centre, grade and payment type. Reads data only; the POST carries the filter body. Accounting API: POST /accounting/api/AccountingExport.
Eingabe-Schema
{
"type": "object",
"properties": {
"exportReportId": {
"description": "Export report id (one the organisation has; see expenseondemand_list_export_templates).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"exportType": {
"description": "1 = new items, 2 = previously exported items.",
"type": "integer",
"minimum": 1,
"maximum": 2
},
"fromDate": {
"description": "Start of the expense submission date range.",
"type": "string"
},
"toDate": {
"description": "End of the expense submission date range.",
"type": "string"
},
"expenseCategoryFilter": {
"description": "Expense category ids (list of ids; leave out for no filter).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"claimantFilter": {
"description": "Claimant ids (list of ids; leave out for no filter).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"costCenterFilter": {
"description": "Cost centre ids (list of ids; leave out for no filter).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"claimantTypeFilter": {
"description": "Claimant type ids (list of ids; leave out for no filter).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"gradeFilter": {
"description": "Grade ids (list of ids; leave out for no filter).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"paymentTypeFilter": {
"description": "Payment type ids (list of ids; leave out for no filter).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_get_payroll_export
Get the total approved expense amount per employee for payroll: name, email, expense count and total amount. Accounting API: GET /accounting/api/PayrollExport.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_list_export_templates
List the export report types configured for the subscription, with their report ids and fields. Use a reportId as exportReportId in expenseondemand_export_accounting. Meta API: GET /meta/api/GetExportTemplates.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_list_expense_categories
List the expense categories of the subscription with id, name, active flag and base category id. Meta API: GET /meta/api/GetExpenseCategoriesForOrganisation.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_list_grades
List the employee grades of the subscription with id, name and active flag. Meta API: GET /meta/api/GetGradesForOrganisation.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_list_customers
List the customers of the subscription with id, name, codes and active flag. Customer API: GET /customer/api/GetCustomersForOrganisation.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_add_customer(name, code, code2, isActive)
Add a customer to the subscription. The id is generated by ExpenseOnDemand. Creates a new record each call. Customer API: POST /customer/api/AddCustomerForSubscription.
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"description": "Customer name.",
"type": "string"
},
"code": {
"description": "Customer code 1.",
"type": "string"
},
"code2": {
"description": "Customer code 2.",
"type": "string"
},
"isActive": {
"description": "Whether the customer is active.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_update_customer(id, name, code, code2, isActive)
Update an existing customer by id. Send every field you want to keep: the vendor may clear fields you leave out, so read the record first with expenseondemand_list_customers. Customer API: POST /customer/api/UpdateCustomerForSubscription.
Eingabe-Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Id of the customer to update (from expenseondemand_list_customers)."
},
"name": {
"description": "Customer name.",
"type": "string"
},
"code": {
"description": "Customer code 1.",
"type": "string"
},
"code2": {
"description": "Customer code 2.",
"type": "string"
},
"isActive": {
"description": "Whether the customer is active.",
"type": "boolean"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_list_cost_centres
List the cost centres of the subscription with id, name, codes and active flag. Cost Centre API: GET /costCentre/api/GetCostCentresForOrganisation.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_add_cost_centre(name, code, code2, isActive)
Add a cost centre to the subscription. The id is generated by ExpenseOnDemand. Creates a new record each call. Cost Centre API: POST /costCentre/api/AddCostCentreForSubscription.
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"description": "Cost centre name.",
"type": "string"
},
"code": {
"description": "Cost centre code 1.",
"type": "string"
},
"code2": {
"description": "Cost centre code 2.",
"type": "string"
},
"isActive": {
"description": "Whether the cost centre is active.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_update_cost_centre(id, name, code, code2, isActive)
Update an existing cost centre by id. Send every field you want to keep: the vendor may clear fields you leave out, so read the record first with expenseondemand_list_cost_centres. Cost Centre API: POST /costCentre/api/UpdateCostCentreForSubscription.
Eingabe-Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Id of the cost centre to update (from expenseondemand_list_cost_centres)."
},
"name": {
"description": "Cost centre name.",
"type": "string"
},
"code": {
"description": "Cost centre code 1.",
"type": "string"
},
"code2": {
"description": "Cost centre code 2.",
"type": "string"
},
"isActive": {
"description": "Whether the cost centre is active.",
"type": "boolean"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢expenseondemand_list_users
List the users (employees) of the subscription with email, name, status (1 Active, 2 Inactive, 3 NotInvited, 4 Pending, 5 Deleted), role and approver email. Users API: GET /users/api/GetUsersForOrganisation.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_add_employee(email, firstName, lastName, employeeId, employeeId2, ...)
Add an employee to the subscription. ExpenseOnDemand treats the new employee as invited. Creates a record each call, so check expenseondemand_list_users first. Users API: POST /users/api/AddEmployee.
Eingabe-Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email ID of the employee."
},
"firstName": {
"type": "string",
"description": "First name of the employee."
},
"lastName": {
"type": "string",
"description": "Last name of the employee."
},
"employeeId": {
"type": "string",
"description": "Employee ID 1 (your HR or payroll id)."
},
"employeeId2": {
"description": "Employee ID 2 (optional).",
"type": "string"
},
"employeeId3": {
"description": "Employee ID 3 (optional).",
"type": "string"
},
"employeeId4": {
"description": "Employee ID 4 (optional).",
"type": "string"
},
"employeeRole": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"description": "Role: 1 = Claimant, 2 = Approver, 3 = Finance Manager."
},
"approverEmail": {
"description": "Email of the approver assigned to this employee.",
"type": "string"
}
},
"required": [
"email",
"firstName",
"lastName",
"employeeId",
"employeeRole"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_update_employee(email, firstName, lastName, employeeId, employeeId2, ...)
Update an existing employee, identified by email. Send every field you want to keep: the vendor may clear fields you leave out, so read the record first with expenseondemand_list_users. Users API: POST /users/api/UpdateEmployee.
Eingabe-Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email ID of the employee."
},
"firstName": {
"type": "string",
"description": "First name of the employee."
},
"lastName": {
"type": "string",
"description": "Last name of the employee."
},
"employeeId": {
"type": "string",
"description": "Employee ID 1 (your HR or payroll id)."
},
"employeeId2": {
"description": "Employee ID 2 (optional).",
"type": "string"
},
"employeeId3": {
"description": "Employee ID 3 (optional).",
"type": "string"
},
"employeeId4": {
"description": "Employee ID 4 (optional).",
"type": "string"
},
"employeeRole": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"description": "Role: 1 = Claimant, 2 = Approver, 3 = Finance Manager."
},
"approverEmail": {
"description": "Email of the approver assigned to this employee.",
"type": "string"
}
},
"required": [
"email",
"firstName",
"lastName",
"employeeId",
"employeeRole"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴expenseondemand_deactivate_employee(email)
Deactivate an employee by email, so they can no longer submit or approve expenses. Users API: POST /users/api/DeactivateEmployee.
Eingabe-Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email ID of the employee to deactivate."
}
},
"required": [
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Nachweis