fincon
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_loopsA | The reconciliation loops this controller can close. Each carries the policy and taxonomy governing it, the strategies it matches with in the order it tries them, the source files it expects, and any promoted rules in force. Read it before asking for a close: the loop decides what a "side", a "counterparty" and a "tolerance" mean, and nothing here is hardcoded in the engine. |
| list_source_setsB | Which periods' source files are on disk, complete or not. Incomplete ones are listed with the missing filenames named. A close over a half-arrived period would report a clean month over rows that never came, so it is refused — but the fact that October is short one file is the useful answer, not an empty list. |
| list_runsC | Closes already recorded, by run id. A run id is derived from the source bytes and the authority in force, so re-closing identical inputs under an unchanged policy reuses the id rather than creating a second record of one event. |
| run_closeA | Close one period: match, verify, post, record. Note what this does not take. There is no policy argument, no tolerance, no rule set and no chart of accounts — a caller picks which loop and which period and nothing else, and everything that decides whether an answer is permitted is loaded from the loop's own signed bundles. You cannot widen a tolerance through this tool because there is no parameter through which to try. Every posting it writes descends from a proof that was re-derived from raw records before anyone saw it; a match that fails re-derivation is dropped and its refusal recorded. The return value is read back out of the decision log the close just wrote, so what you see is what an auditor holding that file would see. |
| run_matchA | Match one period and return the proofs — no posting, no ledger, no log. The matching stage on its own, for a caller that wants to check our arithmetic rather than have us close the books. Returns proven matches with their full proofs, everything the verifier refused, and the exceptions raised. The records are not inlined — 543 rows of this toy corpus is ~342 KB,
most of a context window. Matches page too, proofs included, because a caller here is calling for the
proofs. |
| get_closeA | A recorded close, rebuilt from its decision log. Match rate with its tier split and its proof-tier split, what is blocked, what is waiting on a human, which authority it ran under and whether that authority's signature held. Blocking recall is reported absent rather than zero: it is measured against labelled true pairs and production has no labels — a zero there would be a claim we did not earn.
|
| get_proofA | One match with its full proof — every leg, its record ids and its subtotal. What a verifier reads before calling |
| fetch_recordsD | The records a loop reads, a budget at a time. Here for completeness, and worth skipping: verifying our arithmetic against records we handed you proves the sum and not the honesty. The source files, the adapter specs and the policy are all published — ingest them yourself and verify against those. |
| get_worklistB | The exception queue, ranked by cash impact x age and routed to an owner. This is the tail, and the tail is the product. An item whose code has not been ratified carries a note saying so — a proposed category rendered identically to a promoted one would hide the one thing you need in order to know how much to trust it. |
| explain_exceptionC | One exception with its evidence, its records and what it is allowed to do.
|
| audit_exportA | Everything needed to re-derive a close, and nothing that requires us. Every decision with its proof, the rule version that fired, the human who
approved the authority, the source document hashes and the adapter spec ids
that read them. |
| get_eventsB | The typed decision log, event by event, hash-chained. Append-only in the only sense a file can be: each event carries the hash of
the one before it, so an edit, a deletion or a reorder breaks the chain and
Paged: 62 events for a 22-payout month is 114 KB. |
| verify_proofA | Re-derive one proof from records you hold. Stateless, and it trusts nothing. The verifier fetches each record by id, recomputes every leg subtotal and the residual from those records, and compares against what the proof claims. It reads no stored residual, takes its sign convention from policy rather than from the proof, and refuses a proof whose claimed tolerance exceeds the policy ceiling. A proof that names a record you did not supply is refuted, not excused. Name a This call is how you check our work without trusting us. Take a proof out of
|
| reverify_closeA | Re-derive a whole recorded close from the source files on disk. Re-ingests the sources with the published adapter specs, checks each document's sha256 against the hash the record pinned, and re-derives every proof in the log against those fresh records. Nothing is read from the memory of the process that ran the close, so this is the same thing an outside auditor does — done by us, on demand. Three failure modes, reported apart because they mean different things.
|
| verify_journalB | Check a decision log's hash chain and its terminator. The terminator states how many events precede it and what was decided; those are claims by the writer, and this checks them against the stream. A valid chain over a truncated log is still a valid chain, which is exactly why the terminator has to be there. |
| propose_reclassificationA | Ask whether a proposed code for an exception would be admissible. Nothing is written. The proposal goes through the same checker the live
triage path uses: the code must resolve in the registry and be assignable,
the hypothesis must exist, the evidence must cite a record the exception
actually names, and the exception's own label must not already rest on
stronger evidence than a proposal can carry. A derived A verdict of |
| dispose_exceptionA | End an exception in a journal entry: book, carry_forward, chase, write_off. This moves money, and it is meant to. The item leaves the worklist, double entry is written, and the record carries your name and the fact that an agent put it there. What it will still refuse, all of it from the loop's signed policy and
none of it from you: a write-off above the per-item ceiling, one that would
exhaust the close's write-off budget, a
|
| accept_classificationA | Accept a proposed code for an exception, under your name.
|
| sign_off_closeB | Accept the close. The terminal decision, and the strongest claim here. Three refusals stand, and they bind an agent exactly as they bind a person at a screen, because none of them was ever a question about who was calling: books that do not balance, blocking items nobody has opened, and an unnamed signer. Delegating to an agent does not make an unopened item opened — read the worklist first, the same as anyone would. The pack records that this signature arrived through an agent. That is not a hedge against you; it is what lets a reader a year from now tell the difference between a close somebody read and a close somebody automated. |
| get_authorityB | The policy, vocabulary and promoted rules governing a loop — and who signed. Codes carry their lifecycle state: naming one grants nothing, and only a
|
| get_contractsA | JSON Schema for the public, semver'd shapes — Record, Proof, Policy, Event. Published so another system can build on them. They are versioned under ADR-002: a field change is a version bump, not an edit, because an independently-written verifier that stops working is the one failure this design cannot survive. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Abishai95141/FinCon'
If you have feedback or need assistance with the MCP directory API, please join our Discord server