Passportiq

v1.0.0

A powerful MCP server built with NitroStack

Connection Setup

Add via Cursor Settings UI (Settings > Features > MCP > Add New MCP Server):

{
  "mcpServers": {
    // your other mcp servers
    "passportiq": {
      "url": "https://passportiq-6a6d73f0-lucky-tokens-srmist.app.nitrocloud.ai/mcp"
    }
  }
}

Connect remote tools directly via Claude's Web UI:

Add custom connector BETA
Connect Claude to your data and tools. Learn more about connectors or get started with pre-built ones.
Advanced settings
Only use connectors from developers you trust. Anthropic does not control which tools developers make available and cannot verify that they will work as intended or that they won't change.

Configure custom tools directly via ChatGPT's Web UI:

New App
PNG only. Best results at 256 x 256 px or larger. Max file size: 10 KB
Custom MCP servers introduce risk. Learn more
OpenAI hasn't reviewed this MCP server. Attackers may attempt to steal your data or trick the model into taking unintended actions, including destroying data.

Add the following configuration block under mcpServers in your Antigravity configuration file (~/.gemini/config/mcp_config.json):

{
  "mcpServers": {
    // your other mcp servers
    "passportiq": {
      "serverUrl": "https://passportiq-6a6d73f0-lucky-tokens-srmist.app.nitrocloud.ai/mcp"
    }
  }
}

Add the following configuration block to your Codex configuration file (~/.codex/config.toml):

[mcp_servers.passportiq]
url = "https://passportiq-6a6d73f0-lucky-tokens-srmist.app.nitrocloud.ai/mcp"

Connect directly using the Server-Sent Events endpoint:

https://passportiq-6a6d73f0-lucky-tokens-srmist.app.nitrocloud.ai/mcp
Available Tools
detect_duplicate_signals

Check this application's phone, address, email, passport number, identity and document image hashes against every other seeded applicant for reuse. Returns one signal per reused identifier per matched application, with severity and confidence.

build_risk_graph

Build the applicant link-analysis graph for this application's cluster. Nodes are applications (coloured by risk level), edges are the identifiers they share. Traverses links transitively, so an applicant connected only through an intermediary still appears.

officer_decide

Record the officer's final decision on an application: approve, request clarification, or reject. Blocked until every verification stage has completed for that application. This is a human decision — the AI never auto-approves.

run_verification_pipeline

Run the full verification pipeline for one application, in order: document_validate, ocr_extract, identity/address consistency, duplicate-signal detection, risk graph, rule evaluation, risk scoring and explanation. Each stage emits pipeline.stage_completed as it finishes so the dashboard updates live. Does NOT decide the application — that is officer_decide, which stays a human action.

list_applications

List every passport application in the queue with its applicant, document count, submission date, current status and verification progress. Use this to pick an application to verify — do not guess application IDs.

get_application

Full detail for one passport application: applicant fields, address, every submitted document with its type and image hash, current status, and any decision already recorded. This is the raw case file — verification findings come from the pipeline tools.

list_applicant_clusters

Group the entire applicant pool into clusters of applications connected by shared identifiers (phone, address, email, passport number, identity, document image). Answers "are there any fraud rings in the queue at all?" without verifying each application one by one — the intake-triage view.

get_pipeline_events

Read the ordered event stream for one application — every pipeline.stage_completed and application.decided event, with its payload. Pass the last sequence number you saw as `sinceSequence` to fetch only what is new, so a dashboard can stream the timeline.

get_pipeline_progress

Which verification stages have completed for this application, which are still outstanding, and whether an officer decision is unlocked yet. Read-only — this asks the same question PipelineCompleteGuard enforces, without attempting a decision.

get_audit_trail

The append-only record of officer decisions: who decided, what they decided, when, the risk score on screen at the time, and which applications were linked. Omit applicationId for the full trail across every case.

document_validate

Check the document set against the statutory checklist for this application type: which required documents are absent, which submitted documents have expired, and which expire inside the processing window. Returns a full per-document checklist, so the officer sees what was checked and not only what failed. Deterministic — no model involved.

ocr_extract

AI-assisted field extraction from ONE submitted document: name, date of birth, address, document number and parent names where present, each with its own confidence. Reports `extractionMode` so the caller can see whether a model read the scan ('vision-llm') or the fields came from the deterministic path ('deterministic'). Call once per document type; the consistency stages then diff the results against each other.

check_identity_consistency

Compare the applicant name and date of birth stated on EVERY submitted document against the application form and against each other. Name comparison distinguishes a genuinely different person from a filing convention — reordered names, an expanded initial or an omitted middle name are graded low rather than reported as identity conflicts, because a panel of false positives is what makes officers stop reading the panel. Dates of birth are compared exactly and are always high severity.

check_address_consistency

Compare the residential address on the application form against every address-bearing document. PIN code is compared exactly and graded high — it is the one machine-checkable address field, so a difference there is a real discrepancy rather than a transcription variant. City, state and street line are compared with normalisation. Documents that state no address do not participate: a photograph carrying no address is not an inconsistency.

visual_similarity_flag

ADVISORY FLAG, NOT A BIOMETRIC MATCH. Compares the photograph on two applications. When the two image files are byte-identical this is reported deterministically as a fact about the files. When they differ, the surrounding application context (shared identifiers, dates of birth, cluster membership) is reasoned over instead, and the payload states that no image comparison was performed. Optional stage — it is NOT required before an officer decision, and the score weights it low on purpose.

evaluate_rules

Apply the cited passport rulebook to everything the earlier stages established. Returns the rules that FIRED (each with a statutory citation, severity, source stage and evidence), the rules that were evaluated and passed, and — critically — the rules that were SKIPPED because an upstream stage had not reported. A skipped rule is unchecked, not passed: collapsing those two into one boolean is how an unverified application comes to look like a cleared one. Fully deterministic.

score_risk

Combine every stage result into a weighted 0-100 risk score with a band, a per-category breakdown, and a named factor for every point in the total — so the number is reviewable rather than asserted. Also returns `confidence`, which reports how much of the pipeline actually reported in: a low score at low confidence is an UNASSESSED application, not a safe one, and the officer UI must render that caveat. Deterministic arithmetic; no model is involved, because a government risk score that changes between two identical runs cannot be defended in an appeal.

explain_risk

Turn the score and its findings into an officer-readable case note, an ordered evidence list, a recommended action and — if clarification is the recommendation — the specific questions to put to the applicant. The recommendation is computed deterministically; a language model, when configured, only phrases it. `narrationMode` states which happened. The recommendation is never a decision: officer_decide is a separate guarded human tool and nothing in this stage can reach it.

agent_investigate

Run the autonomous verification agent on one application. The agent decides its own next action each turn based on what it has learned so far — it is not a fixed pipeline. It reacts to its own findings (for example, it only compares photographs when it has already found a reused document image, and it picks the comparison target from those findings), spends extra turns when its confidence is low, and terminates by handing the case to a human officer with a recommendation and a worst-first checklist. The agent CANNOT approve or reject an application — that authority is the officer's alone. Returns the complete reasoning trace for audit.

agent_triage_queue

Autonomously investigate every pending application, then correlate the results ACROSS the queue to surface coordinated fraud rings that no single-file review can see. Returns the officer work queue ordered by genuine urgency — senior-review cases first, then by risk score, then by how many other applicants are implicated — plus the list of detected rings. Every row carries the agent run id that produced it, so any ranking can be traced back to the reasoning behind it.

agent_recommend_decision

Read back the agent's recommendation for an application from its most recent investigation, including the worst-first officer checklist and whether senior review is requested. This is a RECOMMENDATION ONLY: humanDecisionRequired is always true, and the agent has no path to officer_decide. Does not re-investigate — call agent_investigate first if no run exists yet, so that the rationale you read always describes the run that actually produced it.

get_agent_trace

Fetch the complete step-by-step reasoning trace of an agent run — every thought, the action chosen, the arguments it derived, what it observed back, its confidence at that point, and whether the turn was planned by an LLM or by the deterministic policy. Failed steps and overridden LLM proposals are included on purpose: this is an audit record, not a highlight reel. Pass runId for a specific run, or applicationId for the most recent run on that application.

submit_passport_application

STEP 1 OF THE PASSPORT PROCESS. File a new passport application and open a case. Generates an ARN (Application Reference Number), registers the applicant in the verification pool, and reindexes the cross-application fraud graph so the new application is immediately comparable against every existing one. Returns the ARN, the fee due, and the document checklist for the chosen application type.

pay_application_fee

STEP 2. Collect the application fee against an ARN and issue a receipt. Amount is derived from the application type and the tatkal flag using the Passport Seva fee schedule. Refused unless the case is at the "submitted" stage.

book_psk_appointment

STEP 3. Allot a Passport Seva Kendra appointment slot for a paid application. The PSK is chosen from the applicant's state unless one is named. Tatkal cases get the next working day; normal cases three days out.

complete_psk_visit

STEP 4. Record a completed Passport Seva Kendra visit: counter A (document granting), counter B (biometrics — photo, ten fingerprints, signature) and counter C (final granting). Counter C only clears when every mandatory document for the application type was produced; an incomplete checklist is recorded, not hidden, and will block verification.

submit_clarification_response

The applicant answers an officer's clarification request, returning the case to the officer review queue. Only valid while the case is held at "clarification".

withdraw_passport_application

The applicant withdraws the application. Closes the case at any non-terminal stage and records the reason. Irreversible — a withdrawn case cannot be reopened, a fresh application must be filed.

run_case_verification

STEP 5. Run the full PassportIQ verification pipeline against a case whose PSK visit is complete: document checks, field extraction, identity and address consistency, cross-application duplicate signals, the fraud graph, the government rulebook, the weighted risk score and a plain-language explanation. Refuses to run when counter C is unresolved. Attaches the score, the signals and the linked-application cluster to the case.

initiate_police_verification

STEP 6. Raise a police verification request with the district covering the applicant's address. Requires the verification pipeline to have completed every mandatory stage — the district should not be asked to visit an address the system has not even checked.

record_police_verification

STEP 7. File the district police verification report against a case and move it into the officer review queue. An "adverse" or "incomplete" verdict does NOT reject the application — it is evidence the officer reads. Only a human officer decides.

print_passport_booklet

STEP 8. Allot a passport number and print the booklet. Requires a recorded grant by a named officer — checked against the case record independently of the stage, so no refactor can produce a passport nobody approved.

dispatch_passport

STEP 9. Hand the printed booklet to Speed Post and issue a tracking number the applicant can follow.

confirm_delivery

STEP 10 — the last one. Confirm the applicant received the passport. Closes the case permanently.

get_case_file

Read one passport case end to end: current lifecycle stage, SLA clock, every artefact produced so far (fee receipt, PSK appointment and counter results, police verification report, printed booklet, dispatch tracking), the complete journal of who moved it and why, and the single next step available. This is the tool to call before acting on a case.

list_passport_cases

List passport cases in the register, optionally filtered by lifecycle stage, by whether they are blocked on a human, or by SLA breach. Use waitingOnHuman=true to get exactly the officer's inbox — the cases PassportIQ has carried as far as it is allowed to and handed over. Returns a stage histogram alongside the rows.

get_caseflow_board

The whole passport pipeline as a board: one column per lifecycle stage, in process order, every case as a card with its SLA clock and its next available step. Also returns the lifecycle definition itself (every declared transition, and which of them PassportIQ is permitted to perform unattended) so a client can reason about the process without hard-coding it.

track_passport_application

CITIZEN-FACING STATUS CHECK. Track a passport application by ARN and get the plain-language status a Passport Seva enquiry counter would read out: which stage it has reached, what happens next, the expected date, and the applicant-owned artefacts (fee receipt, appointment slot, Speed Post tracking number). Internal fraud reasoning, officer notes and agent rationale are deliberately NOT returned.

advance_case

AGENTIC DRIVER. Move one passport case forward through as many lifecycle steps as PassportIQ is permitted to perform unattended, then stop and explain why it stopped. Each step returns the reasoning composed BEFORE the action was taken, the tool invoked, and the outcome. The loop always halts at officer_review — granting a passport is reserved for a human and no number of steps will cross it.

caseflow_autopilot

Control the autonomous lifecycle loop that walks the entire case register on a timer: arm it (start), disarm it (stop), or run exactly one pass right now (tick). A tick perceives every open case, prioritises by tatkal and SLA breach, executes the permitted transitions, and narrates what it did and what it refused to do. Use action=tick for a deterministic, demonstrable single pass.

autopilot_status

Report what the autonomous autopilot is doing right now: whether it is armed, which application it is currently investigating, how many it has swept, how many it escalated to a human, and when the next sweep runs. Use this to answer "is the system working on anything?" without triggering work. The autopilot investigates on its own schedule and always stops at the officer handoff — it never records a decision.

autopilot_control

Arm, disarm, or immediately trigger the autonomous autopilot. action="sweep" runs one sweep now and waits for it, returning what the agent concluded; action="start" arms the recurring schedule; action="stop" disarms it. The autopilot only investigates — it cannot approve, reject or request clarification, so this tool cannot change any application's outcome.

get_officer_queue

The officer's prioritised work queue: every application ordered by how urgently a human is needed (undecided first, then highest risk, then largest linked cluster, then least progressed). Each row carries a one-line reason for its position, so this answers "what should I look at next, and why?" in one call. Read-only.

get_console_activity

The live activity feed: every pipeline stage completion, agent step, autopilot sweep and officer decision, in order, with a monotonic id so a caller can poll for only what is new. This is the audit-grade record of everything the machine did, including work no human triggered. Read-only.

copilot_chat

Talk to PassportIQ in plain language. The copilot routes the instruction to the real MCP tools (triage, investigation, pipeline runs, risk explanations, guarded officer decisions), executes them, and answers with every tool call it made listed for audit. It recommends but never decides — "approve X" goes through officer_decide behind the same completeness guard as every other caller.