Koskamo

Zovo Bank Reconciliation MCP

Reconcile a bank account against your books by matching exports like CSV or Excel against cash account registers. It identifies unmatched items such as outstanding checks, deposits in transit, bank fees, and potential typos, then compares adjusted balances to highlight discrepancies.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Zovo Bank Reconciliation MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://bank-reconciliation.zovo.one/mcp
Vendor documentation

What you can do with it

  • Reconcile bank statement against books for a specific month
  • Identify why the bank reconciliation is off by a specific amount
  • Match bank CSV to cash account register and list outstanding checks

Source and maintenance

Community listingRegistry 1.0.1

Protocol and capabilities

Server
bank-reconciliation 1.0.1
MCP protocol
2025-06-18
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Reconciles a bank export against the books (cash account / general ledger export). Use reconcile_bank_to_books when the user attaches both files; use explain_reconciliation_difference when they also give both ending balances and ask why it does not balance. Report the status and counts first; every unmatched row is in the Excel download.

Tools

2 advertised

reconcile_bank_to_books — Reconcile bank to books
Advertised by the server during the last successful anonymous check.

Use this when the user attaches a bank export or statement AND their books (cash account register or general ledger export from accounting software or a spreadsheet) and wants a bank reconciliation: "reconcile my bank statement", "reconcile bank statement against my books", "list what doesn't match", "find outstanding checks and deposits in transit", "match bank transactions to the ledger". Matches rows by check number, amount and date (with a date window), and sums (one deposit = several invoices); lists all unmatched rows on both sides with a classification (outstanding check, deposit in transit, bank fee, interest, NSF, likely duplicate, likely amount typo); builds adjusted bank vs adjusted book balance (PASS only at $0.00); returns an Excel workbook and a PDF reconciliation statement. Does not connect to bank accounts or accounting software, does not post entries, and is not for a single statement without books (use a statement converter for that). Supports up to 20,000 rows per file; CSV and text tables have a 2,000,000-cell limit (including empty cells). Each call saves new Excel and PDF files on the plugin server for 1 hour (private download links), then deletes them.

reconcile_bank_to_books input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "bank_file",
    "books_file"
  ],
  "properties": {
    "bank_file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The bank side: the bank's CSV or Excel (.xlsx) transaction export, or a text PDF bank statement, e.g. bank-september.csv."
    },
    "books_file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The book side: the cash/bank account register or general ledger export from accounting software or a spreadsheet (CSV or .xlsx), e.g. books-september.xlsx."
    },
    "books_sign": {
      "enum": [
        "auto",
        "as_written",
        "flip"
      ],
      "type": "string",
      "description": "Sign of the books file amounts: auto (default) flips only when the amounts clearly match the bank with the opposite sign; as_written keeps them; flip reverses them. Example: auto."
    },
    "date_order": {
      "enum": [
        "MDY",
        "DMY"
      ],
      "type": "string",
      "description": "Order of numeric dates in both files: MDY (US, 09/02/2026) or DMY (02/09/2026). Detected per file when a day is above 12; US is assumed otherwise."
    },
    "period_end": {
      "type": "string",
      "maxLength": 10,
      "description": "Statement / period end date YYYY-MM-DD, e.g. 2026-09-30. Default: the statement end on a PDF, else the month end of the last book entry (capped by the bank file)."
    },
    "bank_columns": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the date column, e.g. Posting Date."
        },
        "debit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the debit column, e.g. Debit (bank file: money out; books file: money in)."
        },
        "amount": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of a single signed amount column, e.g. Amount."
        },
        "credit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the credit column, e.g. Credit (bank file: money in; books file: money out)."
        },
        "balance": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the running balance column, e.g. Balance."
        },
        "check_no": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the check or reference number column, e.g. Num."
        },
        "description": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the description/payee/memo column, e.g. Payee."
        }
      },
      "description": "Optional column names for the bank file when auto-detection picks the wrong column, e.g. {\"date\":\"Post Date\",\"amount\":\"Amount\"}."
    },
    "books_columns": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the date column, e.g. Posting Date."
        },
        "debit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the debit column, e.g. Debit (bank file: money out; books file: money in)."
        },
        "amount": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of a single signed amount column, e.g. Amount."
        },
        "credit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the credit column, e.g. Credit (bank file: money in; books file: money out)."
        },
        "balance": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the running balance column, e.g. Balance."
        },
        "check_no": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the check or reference number column, e.g. Num."
        },
        "description": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the description/payee/memo column, e.g. Payee."
        }
      },
      "description": "Optional column names for the books file, e.g. {\"date\":\"Date\",\"debit\":\"Debit\",\"credit\":\"Credit\",\"check_no\":\"Num\"}."
    },
    "max_group_size": {
      "type": "integer",
      "maximum": 6,
      "minimum": 2,
      "description": "Most rows combined when one deposit equals several book entries (or the reverse), e.g. 4 (default)."
    },
    "check_clear_days": {
      "type": "integer",
      "maximum": 366,
      "minimum": 1,
      "description": "Days a check may take to clear and still match by amount, e.g. 60 (default). Matches by check number allow the same span."
    },
    "date_window_days": {
      "type": "integer",
      "maximum": 31,
      "minimum": 0,
      "description": "Days a bank posting may differ from the book date and still match the same amount, e.g. 5 (default)."
    },
    "bank_ending_balance": {
      "type": "number",
      "maximum": 100000000000,
      "minimum": -100000000000,
      "description": "Ending balance on the bank statement at period end, in dollars, e.g. 48210.55. With book_ending_balance this gives the full adjusted-balance reconciliation."
    },
    "book_ending_balance": {
      "type": "number",
      "maximum": 100000000000,
      "minimum": -100000000000,
      "description": "Cash account balance in the books at period end, in dollars, e.g. 51022.10."
    }
  }
}
reconcile_bank_to_books output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "mode",
    "period_end",
    "files",
    "counts",
    "reconciliation",
    "bank_only_by_class",
    "book_only_by_class",
    "top_bank_only",
    "top_book_only",
    "explanation",
    "warnings",
    "downloads",
    "note"
  ],
  "properties": {
    "mode": {
      "enum": [
        "balances",
        "partial",
        "activity"
      ],
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "files": {
      "type": "object",
      "required": [
        "bank",
        "books"
      ],
      "properties": {
        "bank": {
          "type": "object",
          "required": [
            "name",
            "type",
            "rows"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "rows": {
              "type": "number"
            },
            "type": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "books": {
          "type": "object",
          "required": [
            "name",
            "type",
            "rows"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "rows": {
              "type": "number"
            },
            "type": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "counts": {
      "type": "object",
      "required": [
        "matched",
        "matched_bank_rows",
        "matched_book_rows",
        "by_check_number",
        "same_date",
        "within_window",
        "many_to_one",
        "one_to_many",
        "ambiguous",
        "bank_only",
        "book_only",
        "typo_pairs"
      ],
      "properties": {
        "matched": {
          "type": "number"
        },
        "ambiguous": {
          "type": "number"
        },
        "bank_only": {
          "type": "number"
        },
        "book_only": {
          "type": "number"
        },
        "same_date": {
          "type": "number"
        },
        "typo_pairs": {
          "type": "number"
        },
        "many_to_one": {
          "type": "number"
        },
        "one_to_many": {
          "type": "number"
        },
        "within_window": {
          "type": "number"
        },
        "by_check_number": {
          "type": "number"
        },
        "matched_bank_rows": {
          "type": "number"
        },
        "matched_book_rows": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "status": {
      "enum": [
        "PASS",
        "DIFFERENCE",
        "BALANCES_NEEDED"
      ],
      "type": "string",
      "description": "PASS only when both ending balances are known and the difference is $0.00; BALANCES_NEEDED = activity explained, balances needed."
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "xlsx",
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "period_end": {
      "type": "string"
    },
    "explanation": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "found",
            "items",
            "hints"
          ],
          "properties": {
            "found": {
              "type": "boolean"
            },
            "hints": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "items": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "top_bank_only": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "amount",
          "class"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "class": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "top_book_only": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "amount",
          "class"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "class": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "reconciliation": {
      "type": "object",
      "required": [
        "bank_side",
        "book_side",
        "adjusted_bank",
        "adjusted_book",
        "difference",
        "balances_from"
      ],
      "properties": {
        "bank_side": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "amount"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              }
            },
            "additionalProperties": false
          }
        },
        "book_side": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "amount"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              }
            },
            "additionalProperties": false
          }
        },
        "difference": {
          "type": "number"
        },
        "adjusted_bank": {
          "type": "number"
        },
        "adjusted_book": {
          "type": "number"
        },
        "balances_from": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "bank_only_by_class": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "class",
          "count",
          "total"
        ],
        "properties": {
          "class": {
            "type": "string"
          },
          "count": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "book_only_by_class": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "class",
          "count",
          "total"
        ],
        "properties": {
          "class": {
            "type": "string"
          },
          "count": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
reconcile_bank_to_books annotations
{
  "title": "Reconcile bank to books",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
explain_reconciliation_difference — Explain reconciliation difference
Advertised by the server during the last successful anonymous check.

Use this when the user attaches the bank file and the books file, gives the bank statement ending balance and the book balance, and asks why the bank reconciliation does not balance: "why is my bank reconciliation off", "reconciliation difference", "find the difference between bank and books". Runs the same matching, computes adjusted bank vs adjusted book balance, and finds the smallest set of listed items (up to 4) whose amounts account for the difference, plus checks for a reversed sign, a transposition (difference divisible by 9) and a row with that same amount. Returns the same Excel and PDF downloads. Does not change any file and cannot find items that are missing from both files. Supports up to 20,000 rows per file; CSV and text tables have a 2,000,000-cell limit (including empty cells). Each call saves new Excel and PDF files on the plugin server for 1 hour (private download links), then deletes them.

explain_reconciliation_difference input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "bank_file",
    "books_file",
    "bank_ending_balance",
    "book_ending_balance"
  ],
  "properties": {
    "bank_file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The bank side: the bank's CSV or Excel (.xlsx) transaction export, or a text PDF bank statement, e.g. bank-september.csv."
    },
    "books_file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The book side: the cash/bank account register or general ledger export from accounting software or a spreadsheet (CSV or .xlsx), e.g. books-september.xlsx."
    },
    "books_sign": {
      "enum": [
        "auto",
        "as_written",
        "flip"
      ],
      "type": "string",
      "description": "Sign of the books file amounts: auto (default) flips only when the amounts clearly match the bank with the opposite sign; as_written keeps them; flip reverses them. Example: auto."
    },
    "date_order": {
      "enum": [
        "MDY",
        "DMY"
      ],
      "type": "string",
      "description": "Order of numeric dates in both files: MDY (US, 09/02/2026) or DMY (02/09/2026). Detected per file when a day is above 12; US is assumed otherwise."
    },
    "period_end": {
      "type": "string",
      "maxLength": 10,
      "description": "Statement / period end date YYYY-MM-DD, e.g. 2026-09-30. Default: the statement end on a PDF, else the month end of the last book entry (capped by the bank file)."
    },
    "bank_columns": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the date column, e.g. Posting Date."
        },
        "debit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the debit column, e.g. Debit (bank file: money out; books file: money in)."
        },
        "amount": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of a single signed amount column, e.g. Amount."
        },
        "credit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the credit column, e.g. Credit (bank file: money in; books file: money out)."
        },
        "balance": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the running balance column, e.g. Balance."
        },
        "check_no": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the check or reference number column, e.g. Num."
        },
        "description": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the description/payee/memo column, e.g. Payee."
        }
      },
      "description": "Optional column names for the bank file when auto-detection picks the wrong column, e.g. {\"date\":\"Post Date\",\"amount\":\"Amount\"}."
    },
    "books_columns": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the date column, e.g. Posting Date."
        },
        "debit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the debit column, e.g. Debit (bank file: money out; books file: money in)."
        },
        "amount": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of a single signed amount column, e.g. Amount."
        },
        "credit": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the credit column, e.g. Credit (bank file: money in; books file: money out)."
        },
        "balance": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the running balance column, e.g. Balance."
        },
        "check_no": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the check or reference number column, e.g. Num."
        },
        "description": {
          "type": "string",
          "maxLength": 60,
          "description": "Header of the description/payee/memo column, e.g. Payee."
        }
      },
      "description": "Optional column names for the books file, e.g. {\"date\":\"Date\",\"debit\":\"Debit\",\"credit\":\"Credit\",\"check_no\":\"Num\"}."
    },
    "max_group_size": {
      "type": "integer",
      "maximum": 6,
      "minimum": 2,
      "description": "Most rows combined when one deposit equals several book entries (or the reverse), e.g. 4 (default)."
    },
    "check_clear_days": {
      "type": "integer",
      "maximum": 366,
      "minimum": 1,
      "description": "Days a check may take to clear and still match by amount, e.g. 60 (default). Matches by check number allow the same span."
    },
    "date_window_days": {
      "type": "integer",
      "maximum": 31,
      "minimum": 0,
      "description": "Days a bank posting may differ from the book date and still match the same amount, e.g. 5 (default)."
    },
    "bank_ending_balance": {
      "type": "number",
      "maximum": 100000000000,
      "minimum": -100000000000,
      "description": "Ending balance on the bank statement at period end, in dollars, e.g. 48210.55."
    },
    "book_ending_balance": {
      "type": "number",
      "maximum": 100000000000,
      "minimum": -100000000000,
      "description": "Cash account balance in the books at period end, in dollars, e.g. 51022.10."
    }
  }
}
explain_reconciliation_difference output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "mode",
    "period_end",
    "files",
    "counts",
    "reconciliation",
    "bank_only_by_class",
    "book_only_by_class",
    "top_bank_only",
    "top_book_only",
    "explanation",
    "warnings",
    "downloads",
    "note"
  ],
  "properties": {
    "mode": {
      "enum": [
        "balances",
        "partial",
        "activity"
      ],
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "files": {
      "type": "object",
      "required": [
        "bank",
        "books"
      ],
      "properties": {
        "bank": {
          "type": "object",
          "required": [
            "name",
            "type",
            "rows"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "rows": {
              "type": "number"
            },
            "type": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "books": {
          "type": "object",
          "required": [
            "name",
            "type",
            "rows"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "rows": {
              "type": "number"
            },
            "type": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "counts": {
      "type": "object",
      "required": [
        "matched",
        "matched_bank_rows",
        "matched_book_rows",
        "by_check_number",
        "same_date",
        "within_window",
        "many_to_one",
        "one_to_many",
        "ambiguous",
        "bank_only",
        "book_only",
        "typo_pairs"
      ],
      "properties": {
        "matched": {
          "type": "number"
        },
        "ambiguous": {
          "type": "number"
        },
        "bank_only": {
          "type": "number"
        },
        "book_only": {
          "type": "number"
        },
        "same_date": {
          "type": "number"
        },
        "typo_pairs": {
          "type": "number"
        },
        "many_to_one": {
          "type": "number"
        },
        "one_to_many": {
          "type": "number"
        },
        "within_window": {
          "type": "number"
        },
        "by_check_number": {
          "type": "number"
        },
        "matched_bank_rows": {
          "type": "number"
        },
        "matched_book_rows": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "status": {
      "enum": [
        "PASS",
        "DIFFERENCE",
        "BALANCES_NEEDED"
      ],
      "type": "string",
      "description": "PASS only when both ending balances are known and the difference is $0.00; BALANCES_NEEDED = activity explained, balances needed."
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "required": [
        "xlsx",
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "period_end": {
      "type": "string"
    },
    "explanation": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "found",
            "items",
            "hints"
          ],
          "properties": {
            "found": {
              "type": "boolean"
            },
            "hints": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "items": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "top_bank_only": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "amount",
          "class"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "class": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "top_book_only": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "date",
          "description",
          "amount",
          "class"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "class": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "reconciliation": {
      "type": "object",
      "required": [
        "bank_side",
        "book_side",
        "adjusted_bank",
        "adjusted_book",
        "difference",
        "balances_from"
      ],
      "properties": {
        "bank_side": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "amount"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              }
            },
            "additionalProperties": false
          }
        },
        "book_side": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "amount"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              }
            },
            "additionalProperties": false
          }
        },
        "difference": {
          "type": "number"
        },
        "adjusted_bank": {
          "type": "number"
        },
        "adjusted_book": {
          "type": "number"
        },
        "balances_from": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "bank_only_by_class": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "class",
          "count",
          "total"
        ],
        "properties": {
          "class": {
            "type": "string"
          },
          "count": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "book_only_by_class": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "class",
          "count",
          "total"
        ],
        "properties": {
          "class": {
            "type": "string"
          },
          "count": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
explain_reconciliation_difference annotations
{
  "title": "Explain reconciliation difference",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

bank-reconciliation-widget — Zovo Bank Reconciliation view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Bank Reconciliation.

bank-reconciliation-widget URI
ui://widget/bank-reconciliation-v2-1.0.1-6d538f55c924e0c21d9f076e969ba2711a2e0f4adf545113169ea8437857f2e1.html

MIME type: text/html;profile=mcp-app

bank-reconciliation-widget-legacy — Zovo Bank Reconciliation view (previous versions)

Advertised by the server during the last successful anonymous check.

bank-reconciliation-widget-legacy URI template
ui://widget/bank-reconciliation-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1260 ms
95th percentile latency
1260 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1260 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-bank-reconciliation-mcp https://bank-reconciliation.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-bank-reconciliation-mcp --url https://bank-reconciliation.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-bank-reconciliation-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-bank-reconciliation-mcp": {
      "url": "https://bank-reconciliation.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-bank-reconciliation-mcp": {
      "type": "streamableHttp",
      "url": "https://bank-reconciliation.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-bank-reconciliation-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-bank-reconciliation-mcp": {
      "type": "http",
      "url": "https://bank-reconciliation.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-bank-reconciliation-mcp https://bank-reconciliation.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "zovo-bank-reconciliation-mcp": {
      "url": "https://bank-reconciliation.zovo.one/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "zovo-bank-reconciliation-mcp": {
      "serverUrl": "https://bank-reconciliation.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Zovo Bank Reconciliation MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.