ExpenseOnDemand MCP by usefulapi
Read exports, payroll totals and users; add, update or deactivate employees in ExpenseOnDemand.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (18)
- HIGH
- MEDIUMen expenseondemand_list_expense_categories
- MEDIUMen expenseondemand_list_customers
- MEDIUMen expenseondemand_add_customer
- MEDIUMen expenseondemand_update_customer
- MEDIUMen expenseondemand_list_cost_centres
- MEDIUMen expenseondemand_add_cost_centre
- MEDIUMen expenseondemand_update_cost_centre
- LOWen expenseondemand_export_accounting
- LOWen expenseondemand_get_payroll_export
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"expenseondemand": {
"url": "https://expenseondemand.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://expenseondemand.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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.
Esquema de entrada
{
"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"
}Comunidad
Evidencia