Skip to main content
Glama
Gamaleldientarek

jisr-mcp

jisr-mcp

An MCP server that exposes the documented Jisr HR Open API to any MCP client — Claude Code, Claude Desktop, Cursor, Codex, and anything else that speaks the protocol.

Unofficial. Not affiliated with, endorsed by, or supported by Jisr. It uses only Jisr's publicly documented Open API, and never scrapes the web application or calls undocumented endpoints.

Status: in development. Not yet published to npm. Picking this up? Start with HANDOFF.md — current state, what is blocked, and what to do next. The specification, plan and task breakdown live in specs/001-jisr-mcp-server/.

What it does

Covers all 20 documented Jisr read operations — employees, attendance, leave, accruals, payroll and finance, accounting journals, all six lookups, webhooks and audit events — plus three discovery tools, as 23 purpose-built read tools. Feature 002 adds three controlled writes as prepare/commit tool pairs (six tools), every one disabled by default.

There is no generic HTTP tool and no way to reach an operation outside the documented surface. It runs against live Jisr data: no database, no queue, no background workers.

Controlled writes (disabled by default)

Every write is a prepare/commit pair: *_prepare validates and previews without touching Jisr and returns a single-use confirmation reference (5-minute validity); *_commit takes only that reference and performs exactly the previewed write, then reports the state re-read from Jisr — never an echo of what was sent. A write domain that is not explicitly enabled is absent: its tools do not appear in tools/list for any profile.

Pair

Flag

Profile

Notes

jisr_attendance_punch_create_*

JISR_WRITE_ATTENDANCE=enabled

hr_operations

Single punch; current or previous calendar month only; reason required

jisr_employee_create_*

JISR_WRITE_EMPLOYEES=enabled

hr_operations

Live lookup resolution; duplicate warning must be acknowledged

jisr_payroll_transaction_delete_*

JISR_WRITE_PAYROLL_DELETE=enabled

finance

Destructive and dormant; also requires the finance surface; target re-validated at commit

Do not enable any write flag before its section in docs/write-contract-verification.md carries live verification evidence.

Related MCP server: FileMaker MCP Server

Prerequisites

  • Node.js 20 or newer.

  • A Jisr organization with Open API access, and an administrator who can create API credentials under Settings → Webhook & API Keys → API Keys → Add New API Key.

  • Nothing else. If you find yourself installing a database, that's a bug.

The secret is shown once. If it isn't captured at creation, create a new key.

Create two keys, not one

Key

Permissions

Used for

JISR_API_KEY

Core HR read only

Everyday operation

Finance key (optional)

Adds Get Employee Financial Info

Only if you enable the finance surface

This is not ceremony. Jisr returns basic_salary, first_salary_pay_date and last_salary_pay_date inside the ordinary employee list whenever the connected key holds finance permission — governed by the key, not by who is asking. This server strips those fields for non-finance callers, but a narrow key means they never cross the network at all.

Configuration

JISR_BASE_URL=https://apis.jisr.net/api   # AWS-hosted
# JISR_BASE_URL=https://api.jisr.net.sa/api/   # locally hosted
JISR_SLUG=your-organization-slug
JISR_API_KEY=...
JISR_API_SECRET=...
JISR_ROLE_PROFILE=hr_operations

Which base URL? If your Jisr web address ends in .jisr.net.sa you are locally hosted; otherwise AWS. Any other host is rejected at startup.

Role profiles: employee_self, manager, hr_operations, finance, integration_admin, auditor, platform_operator. The profile decides which tools you see and which records they return.

employee_self and manager are defined relative to a person, so they also need JISR_SUBJECT_EMPLOYEE_ID set to that employee's Jisr UUID. The server refuses to start without it rather than returning nothing and letting it look like the person manages nobody.

See docs/authorization-matrix.md for exactly which tools each profile gets, and which records.

Enabling the finance surface

The six financial tools — employee financial information, monthly payables, payroll transactions, GL transaction types, paygroups and accounting journals — require two independent conditions:

  1. JISR_ROLE_PROFILE=finance, and

  2. JISR_FINANCE_SURFACE=enabled

Either alone is insufficient, and that is deliberate. If key permission alone were enough, the first operator to create one convenient broad key would expose payroll to every agent connected to it. With the surface disabled the tools do not appear in the tool list at all — a non-finance caller cannot discover that payroll tooling exists.

JISR_FINANCE_SURFACE=enabled
JISR_FINANCE_API_KEY=...        # recommended: the separate finance-scoped key
JISR_FINANCE_API_SECRET=...

Without this, the six financial tools do not appear — even if your Jisr key permits them. Key permission alone is deliberately not sufficient.

Client setup

Configuration formats differ per client. Use the block for yours.

Claude Code

# Project scope — shared with your team via .mcp.json
claude mcp add jisr --scope project \
  --env JISR_BASE_URL=https://apis.jisr.net/api \
  --env JISR_SLUG=your-organization-slug \
  --env JISR_API_KEY=... \
  --env JISR_API_SECRET=... \
  --env JISR_ROLE_PROFILE=hr_operations \
  -- npx -y jisr-mcp

# User scope — available in all your projects, config kept outside the repo
claude mcp add jisr --scope user --env ... -- npx -y jisr-mcp

Verify with claude mcp list.

Project scope writes credentials into .mcp.json, which is committed. Prefer --scope user, or use project scope only with ${VAR} references rather than literal secrets.

Cursor

Project-scoped: .cursor/mcp.json · Global: ~/.cursor/mcp.json

{
  "mcpServers": {
    "jisr": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "jisr-mcp"],
      "envFile": ".env"
    }
  }
}

Cursor supports envFile for stdio servers, so credentials can stay in an untracked .env rather than in the JSON. If you prefer inline, replace envFile with an env object.

Codex

Codex uses TOML, not JSON. User scope: ~/.codex/config.toml · Project scope: .codex/config.toml (trusted projects only).

[mcp_servers.jisr]
command = "npx"
args = ["-y", "jisr-mcp"]

[mcp_servers.jisr.env]
JISR_BASE_URL = "https://apis.jisr.net/api"
JISR_SLUG = "your-organization-slug"
JISR_API_KEY = "..."
JISR_API_SECRET = "..."
JISR_ROLE_PROFILE = "hr_operations"

Or via the CLI: codex mcp add jisr --env JISR_SLUG=... -- npx -y jisr-mcp. Verify with codex mcp list.

Claude Desktop

Edit claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "jisr": {
      "command": "npx",
      "args": ["-y", "jisr-mcp"],
      "env": {
        "JISR_BASE_URL": "https://apis.jisr.net/api",
        "JISR_SLUG": "your-organization-slug",
        "JISR_API_KEY": "...",
        "JISR_API_SECRET": "...",
        "JISR_ROLE_PROFILE": "hr_operations"
      }
    }
  }
}

Restart Claude Desktop afterwards.

MCP Inspector

JISR_BASE_URL=... JISR_SLUG=... JISR_API_KEY=... JISR_API_SECRET=... \
JISR_ROLE_PROFILE=hr_operations \
npx @modelcontextprotocol/inspector npx -y jisr-mcp

If your tool list looks wrong

The tool list is filtered by your role profile and your key's permissions, so it legitimately differs between people. Some clients cache it and won't notice a configuration change — restart the client to refresh.

A missing tool is not a missing feature. Ask jisr_capabilities_get: it reports four independent facts per operation — specification support, Jisr key permission, your role, operator configuration — and names who can change whichever one declined.

Protocol versions

Ships two adapters over one core, so it works with clients on either protocol revision:

Adapter

Protocol

Default

mcp-v2

2026-07-28

mcp-v1

2025-11-25

set JISR_MCP_ADAPTER=mcp-v1

Both present identical tools, inputs, outputs, error codes and annotations. The v1 adapter will be removed once the clients above have migrated.

Security

  • Financial and sensitive-identity tools are hidden unless the operator explicitly enables them, even when the Jisr key permits them.

  • Credentials never appear in a tool result, log, trace, or error.

  • Collections are scoped to the records your role can reach, before pagination — and no count discloses what lies outside it.

  • Audit records go to stderr as structured JSON. Nothing is written to disk.

See SECURITY.md and the governing principles in .specify/memory/constitution.md.

Development

npm ci
npm run typecheck && npm run lint && npm test
npm run verify:coverage   # implemented surface vs the approved Jisr spec snapshot

See CONTRIBUTING.md.

License and publisher

MIT — see LICENSE.

Published and maintained by Gamal Eldien as an independent, unofficial project. Not affiliated with, endorsed by, or supported by Jisr; built against Jisr's publicly documented Open API only.

Available Tools

11 tools
jisr_audit_events_listList audit eventsA
Read-onlyIdempotent

Lists Jisr audit events, filterable by module, event name, event type and date range. Filters are ordinary named inputs; the server encodes them into Jisr’s bracketed query syntax.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNo
toDateNoYYYY-MM-DD
fromDateNoYYYY-MM-DD
pageSizeNo
eventNameNo
eventTypeNo
moduleNameNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only, idempotent, non-destructive operation. The description adds a useful behavioral detail beyond the annotations: filters are passed as ordinary named inputs and the server converts them into Jisr's bracketed query syntax, preventing an agent from manually constructing that syntax. It does not discuss pagination or output shape, but the annotations lower the bar for safety disclosure.

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 with no filler. The core action is front-loaded and the important encoding behavior is stated in the second sentence. Every sentence contributes meaningful, non-redundant information.

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 read-only list endpoint with all optional parameters and safety already disclosed by annotations, the description is sufficient for an agent to call it correctly. It explains filtering, names the filter dimensions, and warns about the bracket syntax conversion. Pagination and return fields are not described, but no output schema exists and the annotation profile makes these gaps minor.

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 description coverage is low at 29%, so the description must compensate. It meaningfully identifies the filterable parameters (moduleName, eventName, eventType, fromDate/toDate) and clarifies the server-side encoding behavior. cursor and pageSize are not described, but they are conventional and the overall filter semantics are substantially clarified beyond what the schema provides.

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 states a specific verb and resource: 'Lists Jisr audit events'. It further distinguishes the scope by naming the filter dimensions (module, event name, event type, date range), which is more specific than the title alone and clearly separates it from the sibling list tools that target different resources.

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 implicitly establishes when to use this tool: whenever Jisr audit events need to be listed and filtered. It provides clear context about the supported filters but does not explicitly mention when not to use it or name alternatives, though no sibling tool competes for audit events.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_business_units_listList business unitsA
Read-onlyIdempotent

Lists the organization's business units, each with its identifier and both English and Arabic names. Use these to resolve names to stable identifiers before filtering other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPass pagination.nextCursor back unchanged.
pageSizeNoRecords per page, 1-100. Defaults to 50.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful return-content context (identifier and bilingual names) but does not describe pagination behavior or any operational traits beyond what annotations and schema already cover.

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 with no filler: the first states the primary function and return fields, the second states the practical purpose. All content earns its place and the key action verb is front-loaded.

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, read-only list tool with clear annotations and fully documented pagination parameters, the description is complete. It tells the agent what the tool returns (identifier and bilingual names), why to use it (identifier resolution), and the structured schema already covers pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so cursor and pageSize are already fully documented in the schema. The description adds no parameter-level information, which is acceptable because the schema carries that burden.

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?

States a specific verb ('Lists'), a specific resource ('business units'), and the exact content returned (identifier plus English and Arabic names). The added use-case sentence ('resolve names to stable identifiers before filtering other tools') gives it a distinct identity among the many sibling list tools, so an agent can tell it apart.

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 gives a clear, explicit purpose: use business-unit identifiers to resolve names before filtering other tools. It does not explicitly name alternatives or state when not to use this tool, but it provides enough contextual guidance to select it for identifier resolution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_capabilities_getJisr capabilitiesA
Read-onlyIdempotent

Lists every documented Jisr operation and, for each, four independent facts: whether the specification supports it, whether the connected API key permits it, whether your role allows it, and whether the operator enabled it. Explains why anything unavailable is unavailable, and who can change that.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), and the descripion adds meaningful operational context: it reports permission checks against API key, role, and operator enablement, plus remediation hints. This goes beyond the structured hints and gives an agent useful expectations about the tool's diagnostic nature.

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 two sentences with no filler. The primary action is front-loaded, and the four-fact breakdown is clearly structured, making the tool's behavior easy to parse quickly.

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 the tool has no parameters, no output schema, and simple read-only behavior, the descripion fully explains what the tool returns, what dimensions it covers, and that it offers rationale and ownership for unavailability. Nothing essential is missing for an agent to decide when and how to invoke it.

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 tool has zero parameters, so there is no parameter semantics to document. The schema coverage is trivially 100%, and the description appropriately focuses on output content rather than inputs.

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 uses a specific verb ('Lists'), names the resource ('every documented Jisr operation'), and details the scope with four concrete fact types. This clearly distinguishes it from the sibling data-list tools, which target specific entities rather than the operation catalog itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use for discovering which Jisr operations are available and diagnosing why some are not, by stating the four facts and that it explains unavailability. However, it does not explicitly say when to use it instead of a sibling tool or state exclusions, so guidance remains implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_connection_status_getJisr connection statusA
Read-onlyIdempotent

Reports whether this server can reach Jisr, when it last authenticated, and the last authentication error if any. Returns no credentials or organization identifiers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond annotations by explicitly stating that no credentials or organization identifiers are returned, which manages expectations about sensitive data exposure. It also discloses the specific pieces of status information included.

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?

A single, tightly packed sentence that front-loads the primary purpose and then adds the key exclusion. No wasted words; every clause earns its place.

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?

Without an output schema, the description helpfully enumerates the main reported fields (reachability, last authentication time, last error) and the privacy boundary. For a simple status check this is sufficient, though it could theoretically mention whether the call requires any prerequisites or how to interpret a missing auth time.

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 tool has zero parameters, so there is nothing for the description to add about parameter usage. The schema is vacuously complete at 100% coverage, and the description avoids inventing unnecessary parameter details, giving the baseline 4.

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 uses a specific verb ('Reports') with a clear resource (whether the server can reach Jisr, last authentication time, and error). It explicitly differentiates itself by stating what it does not return, which distinguishes it from sibling tools that list data or capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for checking connection/authentication status, but it does not explicitly state when to prefer it over sibling tools or mention any exclusions. Since no alternatives are named, the usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_data_catalog_getJisr data catalogA
Read-onlyIdempotent

Describes the available Jisr domains: which tools serve them, what classified field groups each tool may return and why, how pagination works, and how fresh the data is. Returns no records.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoLimit the catalog to one domain.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds valuable behavioral context beyond them: the tool returns no records, explains pagination semantics, and indicates data freshness. This helps the agent set expectations for the response without contradicting any annotation.

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 tight sentences convey scope, content, pagination behavior, freshness, and a key exclusion ('Returns no records') with no filler. The most important information is front-loaded.

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 low-complexity read-only catalog tool with one optional parameter and rich annotations, the description covers the essential context: what the catalog contains, pagination, freshness, and the absence of records. It does not enumerate the actual domains, but that is inherently the tool's output rather than a precondition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes the only parameter, 'domain', as 'Limit the catalog to one domain.' The description adds context about domains but does not add new parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate.

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 names a specific verb ('Describes') and resource ('available Jisr domains'), and enumerates the concrete contents: tools per domain, classified field groups, pagination, and data freshness. It also explicitly distinguishes itself from data-returning siblings by saying 'Returns no records.'

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 gives clear context for when to call this tool: when an agent needs to understand which Jisr domains exist, which tools serve them, and how pagination/freshness behave. It does not explicitly name alternatives or state when not to use it, but the contrast with record-returning sibling list tools is implied by 'Returns no records.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_departments_listList departmentsA
Read-onlyIdempotent

Lists the organization's departments, each with its identifier and both English and Arabic names. Use these to resolve names to stable identifiers before filtering other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPass pagination.nextCursor back unchanged.
pageSizeNoRecords per page, 1-100. Defaults to 50.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond the annotations by disclosing that identifiers are stable and that the tool is meant for resolving names to identifiers.

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 focused sentences: the first states what the tool does and returns, the second states its intended usage. Every word earns its place, with no filler or repetition.

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 read-only list tool with fully documented optional parameters, the description is complete: it specifies the resource, output fields, and the operational context. The absence of an output schema is compensated by describing what each listed item contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both cursor and pageSize already documented. The description adds no parameter-specific details beyond the schema, so the baseline of 3 is appropriate.

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 states a specific verb ('Lists'), a concrete resource ('the organization's departments'), and the exact output contents ('identifier and both English and Arabic names'). It is clearly distinguishable from sibling list tools by naming 'departments' as the resource.

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 gives explicit context for when to use this tool: 'Use these to resolve names to stable identifiers before filtering other tools.' It does not discuss exclusions or alternatives, but the intended use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_employment_types_listList employment typesA
Read-onlyIdempotent

Lists the organization's employment types, each with its identifier and both English and Arabic names. Use these to resolve names to stable identifiers before filtering other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPass pagination.nextCursor back unchanged.
pageSizeNoRecords per page, 1-100. Defaults to 50.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context by explaining the returned data shape (identifier plus bilingual names) and the intended role of these identifiers in downstream filtering.

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 two concise, front-loaded sentences. The first states exactly what the tool does, and the second explains why an agent would use it. No filler or redundant content.

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, read-only list tool with optional pagination and no required parameters, the description fully covers the tool's purpose, result contents, and usage intent. Annotations and schema handle safety and parameter details, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both optional parameters (cursor and pageSize) are already fully documented. The description adds no parameter-specific details beyond what the schema provides, which fits the baseline for high schema coverage.

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 uses a specific verb and resource: 'Lists the organization's employment types'. It also specifies what each item contains (identifier, English and Arabic names), making the tool's purpose unambiguous and distinguishing it from sibling list tools for other entities.

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 gives clear context for use: resolving names to stable identifiers before filtering other tools. It does not explicitly list exclusions or alternative tools, but for a simple list endpoint the stated purpose is sufficient guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_locations_listList locationsA
Read-onlyIdempotent

Lists the organization's locations, each with its identifier and both English and Arabic names. Use these to resolve names to stable identifiers before filtering other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPass pagination.nextCursor back unchanged.
pageSizeNoRecords per page, 1-100. Defaults to 50.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is not the description's burden. The description adds useful context beyond annotations by noting that identifiers are stable and that both English and Arabic names are returned, which helps an agent reuse the output correctly.

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 short sentences with no filler: the first states the operation and output shape, the second states the intended use. The most important information is front-loaded.

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 low-complexity, read-only list tool with no output schema, the description explains the returned record shape and the workflow role. Combined with the schema's pagination fields and the annotations, an agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (cursor and pageSize) are fully described in the schema, so schema coverage is 100%. The description provides no additional parameter-level meaning, so the baseline of 3 is appropriate.

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 names a specific verb ('Lists') and resource ('the organization's locations'), and further specifies the output contents: identifier plus English and Arabic names. This clearly distinguishes it from sibling list tools such as jisr_departments_list or jisr_business_units_list.

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?

It gives an explicit use case: resolve names to stable identifiers before filtering other tools. It does not name alternatives or list when not to use it, but the context is clear enough for an agent to select this tool when a location identifier is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_nationalities_listList nationalitiesA
Read-onlyIdempotent

Lists the organization's nationalities, each with its identifier and both English and Arabic names. Use these to resolve names to stable identifiers before filtering other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPass pagination.nextCursor back unchanged.
pageSizeNoRecords per page, 1-100. Defaults to 50.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered by structured metadata. The description adds useful context about the returned fields and scope, but it doesn't disclose additional behavioral traits such as pagination behavior beyond what the schema already shows.

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?

Both sentences earn their place: the first states what the tool returns, and the second explains why an agent would use it. There is no filler or repetition of information already present in the schema or annotations.

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, no-required-parameter list tool with annotations covering read-only behavior and schema covering pagination, the description is complete. It tells the agent what is returned, the scope, and the intended use case without requiring an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both cursor and pageSize already documented in the input schema. The description adds no additional parameter-level meaning, which is fine because the schema already carries the semantic burden.

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 lists the organization's nationalities and specifies the key output fields: identifier, English name, and Arabic name. This clearly separates it from sibling list tools for departments, locations, employment types, and so on.

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?

It provides clear usage context: use these values to resolve names to stable identifiers before filtering other tools. It doesn't explicitly mention when not to use it or name alternatives, but the purpose is specific enough that an agent can recognize it as a reference lookup tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_outsourcing_companies_listList outsourcing companiesA
Read-onlyIdempotent

Lists the organization's outsourcing companies, each with its identifier and both English and Arabic names. Use these to resolve names to stable identifiers before filtering other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPass pagination.nextCursor back unchanged.
pageSizeNoRecords per page, 1-100. Defaults to 50.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds meaningful behavioral context beyond that: each entry contains an identifier and both English and Arabic names, and the output is intended for resolving names to stable IDs. No contradiction with 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, each earning its place: the first states action and output, the second states the purpose. No wasted words or redundant restatement of schema or annotations.

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 read-only list with no required parameters and no output schema, the description is complete. It covers what the tool returns, why an agent would call it, and pagination is already handled by the schema. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both cursor and pageSize already have clear descriptions in the input schema. The description adds no parameter-level meaning, so the baseline of 3 applies.

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?

States a specific verb and resource: 'Lists the organization's outsourcing companies.' It also enumerates the key return fields (identifier, English and Arabic names), making the tool's purpose concrete. The resource is unique among the sibling list tools, so an agent can distinguish it from departments, locations, or nationalities lists.

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?

Provides clear usage context: 'Use these to resolve names to stable identifiers before filtering other tools.' This tells the agent when this tool is the right first step, though it does not explicitly name alternatives or provide when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jisr_webhooks_listList webhook subscriptionsA
Read-onlyIdempotent

Lists the organization’s webhook subscriptions: name, endpoint, HTTP method, status and subscribed events. Stored authentication material is never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNo
pageSizeNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond those annotations: 'Stored authentication material is never returned'—a meaningful security guarantee for agents. No contradiction with 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 with no filler. The first sentence identifies the purpose and the returned fields; the second adds a security-relevant behavior. Information is front-loaded and every sentence earns its place.

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 read-only list tool with no required parameters, the description covers purpose, return fields, and a key security aspect. However, it doesn't explain cursor-based pagination or describe the response envelope, and there is no output schema to fill that gap. A modest addition would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the two optional parameters. It doesn't mention cursor at all, leaving its pagination behavior unclear, and doesn't explain pageSize behavior beyond what the schema's min/max provide. The description thus fails to fill 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 uses the specific verb 'Lists', identifies the resource as the organization's webhook subscriptions, and enumerates the exact returned fields (name, endpoint, HTTP method, status, subscribed events). This clearly distinguishes it from sibling list tools such as jisr_audit_events_list or jisr_departments_list by target resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives—no 'use this when...' statement or exclusions. The purpose is clear enough that an agent can infer usage, but the description itself does not state the selection criteria.

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. Dates show when Glama detected each change.

  1. 11 tool updatesv0.1.0
    • First observedjisr_audit_events_list
    • First observedjisr_business_units_list
    • First observedjisr_capabilities_get
    • First observedjisr_connection_status_get
    • First observedjisr_data_catalog_get
    • First observedjisr_departments_list
    • First observedjisr_employment_types_list
    • First observedjisr_locations_list
    • First observedjisr_nationalities_list
    • First observedjisr_outsourcing_companies_list
    • First observedjisr_webhooks_list

TDQS

A4.2/5.0
Disambiguation5/5

Each tool maps to a distinct resource: connection status, capabilities, seven reference-data lists, webhooks, audit events, and data catalog. The similar list tools are clearly separated by entity type, and the two metadata tools serve different purposes.

Naming Consistency5/5

All tool names follow the same jisr_<resource>_<verb> pattern, using consistent snake_case and terminal _get or _list verbs. There is no mixing of conventions or vague generic verbs.

Tool Count5/5

Eleven tools is well within the ideal range for a domain-specific MCP server. Each tool earns its place, covering reference data, metadata, and system visibility without unnecessary overlap.

Completeness3/5

The server thoroughly covers organizational reference data, capabilities, webhooks, and audit events, but it is almost entirely read/list-oriented. It lacks tools for core organizational entities beyond reference data, such as employees, and provides no create/update/delete operations, leaving notable gaps for broader Jisr workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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.
    -
  • F
    license
    B
    quality
    D
    maintenance
    Enables read-only access to FileMaker databases through the Data API, allowing users to retrieve records, analyze metadata, search across layouts, and infer relationships while maintaining data security.
    16
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for Microsoft Entra ID (Azure AD) that enables querying user sign-in logs, group memberships, and assigned Microsoft 365 licenses via Microsoft Graph API. Provides security and audit visibility without any write operations.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gamaleldientarek/jisr-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server