Jisr MCP by usefulapi
Read employees, attendance, leave and payroll; create employee records and import device punches.
我该使用它吗
质量与安全性
发现(2)
- LOW在 jisr_get_employee_financial_info 中
- LOW在 jisr_get_employee_monthly_payables 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"jisr": {
"url": "https://jisr.usefulapi.io/mcp"
}
}
}远程端点
https://jisr.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(16)
🟢jisr_list_employees(status, created_from, joining_from, joining_to, terminated_from, ...)
List the organization's employees (active by default) with code, names (English/Arabic), job title, department, business unit, employment type, line manager, joining date and status. Filter by active/inactive status, creation date and joining, termination or deletion date ranges. If the API key also has the 'Get Employee Financial Info' / 'Accounting Info' permissions, Jisr adds salary, bank (IBAN) and accounting fields: sensitive HR data. GET /openapi/v1/employees.
输入模式
{
"type": "object",
"properties": {
"status": {
"description": "Only active or only inactive employees.",
"type": "string",
"enum": [
"active",
"inactive"
]
},
"created_from": {
"description": "Only employees created on or after this date (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"joining_from": {
"description": "Only employees who joined on or after this date.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"joining_to": {
"description": "Only employees who joined on or before this date.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"terminated_from": {
"description": "Only employees off-boarded on or after this date.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"terminated_to": {
"description": "Only employees off-boarded on or before this date.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"deleted_from": {
"description": "Only employees deleted from the system on or after this date.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"deleted_to": {
"description": "Only employees deleted from the system on or before this date.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_get_employee(id)
One employee's profile by id (UUID from jisr_list_employees): names, code, gender, marital status, phone, emails, date of birth, passport/ID number, address, line manager, department, business unit, employment type, location, nationality and contract. GET /openapi/v1/employees/basic_info?id=.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Employee id (UUID)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_get_employee_financial_info(id)
One employee's financial details by id: salary components and bank account (IBAN). Sensitive payroll data; needs the 'Get Employee Financial Info' permission on the API key. GET /openapi/v1/employees/financial_info?id=.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Employee id (UUID)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_lookup(table, page, rpp)
List one of the organization's lookup tables: departments, employment_types, business_units, locations, nationalities or outsourcing_companies, with their ids and English/Arabic names. Use the ids when creating an employee. GET /openapi/v1/lookups/{table}.
输入模式
{
"type": "object",
"properties": {
"table": {
"type": "string",
"enum": [
"departments",
"employment_types",
"business_units",
"locations",
"nationalities",
"outsourcing_companies"
],
"description": "Which lookup table."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"table"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_attendance_summary(from, to, employee_id, status, page, ...)
Attendance summary per employee for a date range (default: the current month): total working hours, late arrival, early departure, extra and approved overtime, absence days and records. Filter by one employee or by active/inactive status. GET /openapi/v1/attendance/summary.
输入模式
{
"type": "object",
"properties": {
"from": {
"description": "Period start (yyyy-mm-dd). Default: start of the current month.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"to": {
"description": "Period end (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"employee_id": {
"description": "Only this employee (UUID).",
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"status": {
"description": "Only active or inactive employees.",
"type": "string",
"enum": [
"active",
"inactive"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_attendance_punches(status, from, to, page, limit)
List raw clock-in/out punches that were received from punch devices, either the ones that were processed successfully or the ones that failed, in a time window (Jisr's default: the last hour). Each punch has id, punch_time, employee_code, terminal_sn and clocking_id. GET /openapi/v1/attendance_logs.
输入模式
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"success",
"failed"
],
"description": "Which punches: processed successfully, or failed."
},
"from": {
"description": "Window start, yyyy-mm-dd hh:mm:ss. Default: one hour ago.",
"type": "string"
},
"to": {
"description": "Window end, yyyy-mm-dd hh:mm:ss. Default: now.",
"type": "string"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `limit`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"status"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_get_annual_leave_balances(employee_codes, page, limit)
Annual leave balance summaries per employee (all employees, or only the given employee codes, at most 100). Only the annual leave type is supported by Jisr. GET /openapi/v1/employee_leaves/summary.
输入模式
{
"type": "object",
"properties": {
"employee_codes": {
"description": "Employee codes (not ids) to include; omit for everyone.",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 40
}
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `limit`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_paygroups(page, rpp)
List the organization's pay groups (id and name). The pay group id is needed for payroll and accrual queries. GET /openapi/v1/paygroups.
输入模式
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_payroll_transactions(type, pay_period, paygroup_id, from, to, ...)
Payroll transactions per employee for one settlement type. type 'payrun' (the regular payroll) needs pay_period and paygroup_id; 'final_settlements', 'vacations_settlements' and 'out_off_payroll_transactions' need a from/to date range. Optionally filter by employee ids or transaction type ids (jisr_list_gl_transaction_types). Sensitive payroll data. GET /openapi/v1/payroll_transactions.
输入模式
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"payrun",
"final_settlements",
"vacations_settlements",
"out_off_payroll_transactions"
],
"description": "Which settlement."
},
"pay_period": {
"description": "First day of a confirmed month (yyyy-mm-01). Required for type payrun.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"paygroup_id": {
"description": "Pay group id (UUID, jisr_list_paygroups). Required for type payrun.",
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"from": {
"description": "Start date (yyyy-mm-dd). Required for the other types.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"to": {
"description": "End date (yyyy-mm-dd). Required for the other types.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"employee_ids": {
"description": "Only these employees (UUIDs).",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
}
},
"transaction_type_ids": {
"description": "Only these transaction types (UUIDs).",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
}
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_accrual_transactions(accrual_type, paygroup_id, pay_period, employee_ids, page, ...)
Accruals per employee for a confirmed pay period: vacations, end_of_service or tickets_provision (amount, vacation days). Sensitive payroll data. GET /openapi/v1/accrual_transactions.
输入模式
{
"type": "object",
"properties": {
"accrual_type": {
"type": "string",
"enum": [
"vacations",
"end_of_service",
"tickets_provision"
],
"description": "Accrual type."
},
"paygroup_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Pay group id (UUID, jisr_list_paygroups)."
},
"pay_period": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "First day of a confirmed month (yyyy-mm-01)."
},
"employee_ids": {
"description": "Only these employees (UUIDs).",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
}
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"accrual_type",
"paygroup_id",
"pay_period"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_get_employee_monthly_payables(employee_id, pay_period_start)
One employee's payables for a month: net salary, earnings, additions and deductions with breakdowns. Only available to organizations Jisr has whitelisted for this API. Sensitive payroll data. GET /openapi/v1/employee_monthly_payables.
输入模式
{
"type": "object",
"properties": {
"employee_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Employee id (UUID)."
},
"pay_period_start": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "First day of the month (yyyy-mm-01)."
}
},
"required": [
"employee_id",
"pay_period_start"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_gl_transaction_types(page, rpp)
List the payroll (GL) transaction types: id, category (allowances, loan types...), English/Arabic name and status. Use the ids to filter jisr_list_payroll_transactions. GET /openapi/v1/gl_transaction_types.
输入模式
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rpp": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_audit_events(module_name, event_name, event_type, from, to, ...)
The organization's audit trail: who did what and when (module, feature, action, actor, success). Filter by module, event name, event type and a time range. GET /openapi/v1/audit_events.
输入模式
{
"type": "object",
"properties": {
"module_name": {
"description": "Module names, e.g. security.",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"event_name": {
"description": "Event names, e.g. login.",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"event_type": {
"description": "Event types, e.g. updated.",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"from": {
"description": "Only events created at or after this ISO 8601 date-time, e.g. 2026-10-01T00:00:00Z.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"to": {
"description": "Only events created at or before this ISO 8601 date-time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-100 (Jisr's default is 100). Sent as `per_page`.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢jisr_list_webhooks
List the webhooks registered for the organization: name, endpoint host, method, status. Authentication data, custom header values and the endpoint's path and query (they can hold secrets) are hidden. Read-only; this server does not create or change webhooks. GET /openapi/v1/webhooks.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴jisr_create_employee(code, full_name_en, full_name_ar, email, personal_email, ...)
WRITE: register a new employee in Jisr (they are invited to the system by email). Not reversible through this server: there is no delete tool. Get department_id, employment_type_id, location_id and nationality_id from jisr_list_lookup first. Names need at least two parts. POST /openapi/v1/employees.
输入模式
{
"type": "object",
"properties": {
"code": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Employee code, unique within the organization."
},
"full_name_en": {
"type": "string",
"minLength": 3,
"maxLength": 200,
"description": "Full name in English (at least two words)."
},
"full_name_ar": {
"type": "string",
"minLength": 3,
"maxLength": 200,
"description": "Full name in Arabic (at least two words)."
},
"email": {
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Work email."
},
"personal_email": {
"description": "Personal email (unique among active employees).",
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"gender": {
"type": "string",
"enum": [
"Male",
"Female"
]
},
"marital_status": {
"type": "string",
"enum": [
"Single",
"Married",
"Divorced",
"Widowed"
]
},
"joining_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Joining date (yyyy-mm-dd)."
},
"document_number": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "National ID or Iqama number."
},
"nationality_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Nationality id (jisr_list_lookup nationalities)."
},
"department_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Department id (jisr_list_lookup departments)."
},
"employment_type_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Employment type id (jisr_list_lookup employment_types)."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (jisr_list_lookup locations)."
},
"outsourcing_company_id": {
"description": "Outsourcing company id, for outsourced staff.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"contract_type": {
"type": "string",
"enum": [
"Fixed term",
"Indefinite"
],
"description": "Contract type."
},
"contract_period": {
"type": "string",
"enum": [
"1 year",
"2 years",
"Custom"
],
"description": "Contract period."
},
"contract_end_date": {
"description": "Contract end date (yyyy-mm-dd), for fixed-term contracts.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
}
},
"required": [
"code",
"full_name_en",
"full_name_ar",
"email",
"gender",
"marital_status",
"joining_date",
"document_number",
"nationality_id",
"department_id",
"employment_type_id",
"location_id",
"contract_type",
"contract_period"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡jisr_create_attendance_punches(punches)
WRITE: send a batch of raw clock-in/out punches (at most 100) from a punch device into Jisr attendance. Jisr processes them asynchronously; check the result with jisr_list_attendance_punches. Each punch carries the unique id its device generated; do not invent ids. POST /openapi/v1/attendance_logs.
输入模式
{
"type": "object",
"properties": {
"punches": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Unique punch id generated by the device."
},
"terminal_sn": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Serial number / id of the punch device."
},
"emp_code": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Employee code (a string, also for numeric codes)."
},
"punch_time": {
"type": "string",
"description": "When the punch happened, yyyy-mm-ddThh:mm:ss in the organization's local time."
}
},
"required": [
"id",
"terminal_sn",
"emp_code",
"punch_time"
]
}
}
},
"required": [
"punches"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据