Checking...
MortyCP - Morty Context Protocol
Origination Tool Docs Home

MCP Tools Documentation

Overview of available tools, workflows, and integration points exposed to your account.

Updated:
Internal & API clients

MortyCP Tools Reference

Complete reference for all 41 MCP tools available in the MortyCP server. Each tool section lists the bare minimum required fields and important optional fields.


🏠 Loan Management Tools (11 tools)

create_loan

Purpose: Create a new loan with complete commitment details.

Required Fields:

  • loan_title (string) - Title/name for the loan
  • purpose (number: 0 or 1) - 0=Refinance, 1=Purchase
  • loan_amount (number) - Loan amount (will be converted to mortgage.amount)

Important Optional Fields:

  • property (object) - Property information with address
  • mortgage_type (0-4) - 0=Standard, 1=Construction, 2=Commercial, 3=Fix & Flip, 4=Personal
  • interest (number) - Interest rate as percentage
  • term (number) - Term in months
  • frequency (0-3, 7) - Payment frequency: 0=Monthly, 1=Semi-Monthly, 2=Weekly, 3=Bi-Weekly, 7=Quarterly
  • existing_mortgages (array) - Existing mortgages on the property
  • other_properties (array) - Additional properties beyond the primary property

Notes: - Automatically checks for duplicate loans (85% similarity threshold) before creating - Returns existing loan if duplicate found within 30 seconds - Supports extensive fee configuration (broker, lender, admin, placement, title, etc.) - Property address is optional but recommended - Can create loans with existing mortgages and other properties in a single call

get_loan

Purpose: Retrieve detailed information about a specific loan.

Required Fields:

  • loan_id (number) - The ID of the loan to retrieve

Important Optional Fields:

  • response_field_whitelist (array of strings) - Specific fields to include in response

Notes: - Returns full loan object with all related data (borrowers, investors, property, etc.) - Use response_field_whitelist to limit response size for better performance

list_loans

Purpose: List loans with pagination and filtering.

Required Fields:

  • None (all fields optional)

Important Optional Fields:

  • start (number, default: 0) - Pagination start position (0-based)
  • limit (number, 1-100, default: 50) - Number of loans to return
  • status (string: 'active', 'pending', 'completed', 'cancelled') - Filter by status
  • response_field_whitelist (array) - Additional fields beyond defaults

Notes: - Always returns: loan_seq_id, loan_title, status, substatus, investors - API always returns max 50 per request, use start for pagination - Use next value from response to get next page

update_loan

Purpose: Update an existing loan with property, mortgage, or other details.

Required Fields:

  • loan_id (number) - The loan ID to update

Important Optional Fields:

  • loan_title (string) - Update loan title
  • substatus (number) - Update loan substatus
  • property (object) - Update property information (address required if provided)
  • holdback_amount (number) - Holdback/PPI amount for construction loans
  • custom_fees (array) - Custom fees array

Notes: - Uses /loans/create endpoint with loan_id to update - Property address fields (street, city, prov, zip) are required if property object is provided - Cannot update mortgages via this tool - use create_existing_mortgage instead - Can add property details after creating a minimal loan

list_substatuses

Purpose: List available loan substatuses for the account.

Required Fields:

  • None

Notes: - Returns all substatuses configured for your account - Use substatus IDs when updating loans

get_existing_mortgage

Purpose: Get existing mortgage details by ID.

Required Fields:

  • id (number) - The existing mortgage ID (not loan_id)

Important Optional Fields:

  • response_field_whitelist (array of strings) - Specific fields to include in response

Notes: - Requires the existing mortgage ID, not the loan ID - Returns details of a specific existing mortgage including holder, face value, balance, payment, etc.

create_existing_mortgage

Purpose: Create an existing mortgage record for a loan.

Required Fields:

  • loan_id (number) - The loan ID

Important Optional Fields:

  • type (1-7) - Mortgage type: 1=First, 2=Second, 3=Third, etc.
  • holder (string) - Mortgage holder name
  • face_value (number) - Face value of the mortgage
  • balance (number) - Current balance
  • payment (number) - Payment amount
  • frequency (0-2) - 0=Monthly, 1=Weekly, 2=Biweekly
  • interest_rate (number) - Interest rate as percentage

Notes: - Use this to add existing mortgages to a loan after creation - Cannot be added via update_loan tool

update_existing_mortgage

Purpose: Update existing mortgage information.

Required Fields:

  • id (number) - The existing mortgage ID to update (not loan_id)

Important Optional Fields:

  • loan_id (number) - The loan ID this existing mortgage is associated with
  • All fields from create_existing_mortgage are optional for updates

Notes: - Requires the existing mortgage ID, not the loan ID —

create_other_property

Purpose: Create an additional property for a loan (beyond the primary property).

Required Fields:

  • loan_id (number) - The loan ID
  • address (object) - Property address with street, city, prov, zip

Important Optional Fields:

  • value (number) - Property value
  • property_tax (number) - Property tax amount
  • is_blanket (0 or 1) - 0=Tagged property, 1=Blanket property

Notes: - Each property requires an address - Can add multiple properties to a loan - Some fields (jurisdiction, property_pin, etc.) are only available for primary property

get_other_property

Purpose: Get other property details by property ID.

Required Fields:

  • property_id (number) - The other property ID (not other_property_id)

Notes: - Requires the property_id, not loan_id - Returns property information including address, value, property tax, condo fees, etc. —

update_other_property

Purpose: Update other property information.

Required Fields:

  • property_id (number) - The other property ID (not other_property_id)

Important Optional Fields:

  • All fields from create_other_property are optional for updates

Notes: - Requires the property_id, not loan_id —

👥 Borrower Management Tools (6 tools)

create_borrower

Purpose: Create a new borrower with personal information, contact details, and financial data.

Required Fields:

  • first_name (string) - First name
  • last_name (string) - Last name

Important Optional Fields:

  • email (string) - Email address
  • homephone (string) - Home phone (or use phone which maps to homephone)
  • mobile (string) - Mobile phone
  • address (object) - Address with street, city, prov, zip, country
  • dob (number) - Date of birth as Unix timestamp
  • ssn (string) - Social Security Number
  • credit_score (number, 0-850) - Credit score
  • iscorporation (0 or 1) - 0=Individual, 1=Corporation
  • corpname (string) - Company name (required if corporation)
  • employments (array) - Employment information
  • incomes (array) - Income information
  • debts (array) - Debt information
  • assets (array) - Asset information

Notes: - Automatically checks for duplicates by matching first/last name, email, or phone numbers - If duplicate found and duplication_mode=0 (default), returns existing borrower instead of creating - Set duplication_mode=1 to create anyway even if duplicate exists - Use skip_duplicate_check=true to bypass pre-check (API still checks) - For corporations, company is required instead of first/last name - Create borrowers before referencing them in loans

get_borrower

Purpose: Retrieve borrower details by ID.

Required Fields:

  • borrower_id (number) - The borrower ID

Important Optional Fields:

  • response_field_whitelist (array of strings) - Specific fields to include

Notes: - Use after list_borrowers to get full borrower information - response_field_whitelist is useful for efficient searching (e.g., ["first_name", "last_name", "email"])

list_borrowers

Purpose: List borrowers (names only, no IDs) for LLM consumption.

Required Fields:

  • None

Notes: - Returns borrower names formatted for easy reading - Does not return IDs - use get_borrower with name matching to find IDs - Designed for LLM-friendly consumption

update_borrower

Purpose: Update borrower information.

Required Fields:

  • borrower_id (number) - The borrower ID

Important Optional Fields:

  • All fields from create_borrower are optional for updates

attach_borrower_to_loan

Purpose: Link an existing borrower to an existing loan as main client, co-borrower, or guarantor.

Required Fields:

  • loan_id (number) - The loan ID
  • borrower_id (number) - The borrower ID

Important Optional Fields:

  • is_main_client (0 or 1, default: 0) - 1 for main client, 0 for co-borrower
  • is_guarantor (0 or 1, default: 0) - 1 for guarantor, 0 for borrower

Notes: - Borrower cannot be both main client and guarantor - Use after creating both borrower and loan - Defaults to co-borrower if flags not specified

attach_shareholder_to_borrower

Purpose: Attach a shareholder to a borrower entity.

Required Fields:

  • borrower_id (number) - The borrower ID
  • shareholder_id (number) - The shareholder ID

Notes: - Use for corporate borrowers to link shareholders

💰 Investor Management Tools (5 tools)

create_investor

Purpose: Create a new investor with investment capacity and account information.

Required Fields:

  • type (0-4, default: 0) - 0=Individual, 1=Organization (deprecated), 2=Fund (cannot create), 3=Corporation, 4=Servicer
  • first_name (string) - Required if type=0 (Individual)
  • company (string) - Required if type=3 or 4 (Corporation/Servicer)

Important Optional Fields:

  • last_name (string) - Last name (for individuals)
  • email (string) - Email address
  • homephone (string) - Home phone
  • mobile (string) - Mobile phone
  • address (object) - Address with street, city, prov, zip
  • max_ltv (number) - Maximum Loan-to-Value ratio
  • receive_statements_monthly (0 or 1) - Whether to receive monthly statements

Notes: - Create investors before attaching them to loans - Individual investors require first_name - Corporation/Servicer investors require company name - Fund type (2) cannot be created via API

get_investor

Purpose: Get investor details with capacity information.

Required Fields:

  • investor_id (number) - The investor ID

Notes: - Returns investor with capacity information and accounts

list_investors

Purpose: List investors for a specific loan (only investors attached to that loan).

Required Fields:

  • loan_id (number) - The loan ID to get investors for

Important Optional Fields:

  • response_field_whitelist (array of strings) - Specific fields to include in response

Notes: - Important: This tool requires loan_id and only returns investors attached to that specific loan - Does NOT list all investors in the system - only investors on the specified loan - Returns investors with their investment account name and investment amount for that loan - To find all investors, you would need to query multiple loans or use a different approach

update_investor

Purpose: Update investor information.

Required Fields:

  • investor_id (number) - The investor ID

Important Optional Fields:

  • All fields from create_investor are optional for updates

attach_investor_to_loan

Purpose: Link an existing investor account to an existing loan for funding.

Required Fields:

  • loan_id (number) - The loan ID
  • account_id (number) - The payment account ID (NOT investor_id)

Important Optional Fields:

  • amount (number) - Amount the investor will fund
  • interest (number) - Interest rate for this investor
  • rate_type (0-2) - 0=Full variable, 1=Partial variable, 2=Fixed

Notes: - Important: Requires account_id (payment account ID), not investor_id - Use get_investor_account or get_investor to find the account_id - Use after creating investor, their account, and the loan

🏦 Investor Account Management Tools (7 tools)

create_investor_account

Purpose: Create an investment account for an investor.

Required Fields:

  • investor_id (number) - The investor ID
  • legal_name (string) - Legal name of the account holder

Important Optional Fields:

  • check_type (0-4) - 0=Individual, 1=Joint, 2=Company, 3=Trust, 4=Personal Trust
  • vesting_name (string) - Vesting name (for Individual/Joint in US)
  • enable_eft (0 or 1) - Enable EFT payments
  • eft_name, eft_bankid, eft_transit, eft_account, eft_account_type - EFT details
  • default_interest (number) - Default interest rate
  • total_funds_to_invest (number) - Total funds to invest
  • ontitle (0 or 1) - Whether account is on title
  • tax_id_or_ssn (string) - Tax ID or SSN

Notes: - Create accounts before attaching investors to loans - Each investor can have multiple accounts - The account_id returned is needed for attach_investor_to_loan

get_investor_account

Purpose: Get investor account information.

Required Fields:

  • Either account_id (number) OR loan_id (number) - Must provide one

Important Optional Fields:

  • account_id (number) - The account ID (use if you know the account ID)
  • loan_id (number) - The loan ID (returns all accounts associated with the loan)

Notes: - Can retrieve by account_id directly, or by loan_id to get all accounts on a loan - Returns account details including account_id needed for attach_investor_to_loan - When using loan_id, may return multiple accounts (array)

update_investor_account

Purpose: Update investor account details.

Required Fields:

  • account_id (number) - The account ID

get_account_directors

Purpose: Get account director details by director ID.

Required Fields:

  • id (number) - The director ID (not account_id)

Notes: - Requires the director ID, not the account ID - Use this to get director information including legal name and account association —

update_account_directors

Purpose: Update account director information.

Required Fields:

  • id (number) - The director ID to update (not account_id)

Important Optional Fields:

  • account_id (number) - The account ID this director is associated with
  • legal_name (string) - Legal name of the director

Notes: - Requires the director ID, not the account ID —

get_account_trustees

Purpose: Get account trustee details by trustee ID.

Required Fields:

  • id (number) - The trustee ID (not account_id)

Notes: - Requires the trustee ID, not the account ID - Use this to get trustee information including legal name, tax ID, and account association —

update_account_trustees

Purpose: Update account trustee information.

Required Fields:

  • id (number) - The trustee ID to update (not account_id)

Important Optional Fields:

  • account_id (number) - The account ID this trustee is associated with
  • legal_name (string) - Legal name of the trustee
  • tax_id (string) - Tax ID of the trustee

Notes: - Requires the trustee ID, not the account ID —

🏢 Broker Management Tools (9 tools)

get_parent_broker

Purpose: Get parent broker details.

Required Fields:

  • id (number) - The parent broker ID (not parent_broker_id)

Notes: - Parent brokers are the parent companies/organizations that brokers belong to —

create_parent_broker

Purpose: Create a parent broker entity.

Required Fields:

  • None (all fields optional, but name recommended)

Important Optional Fields:

  • name (string) - Broker name
  • address, city, province, zip - Address information
  • phone, fax - Contact information
  • cheque (string) - Cheque name
  • cheque_use_eft (0 or 1) - Use EFT for cheque payments
  • licence (string) - Licence number

Notes: - Parent brokers are top-level broker organizations - Brokers are associated with parent brokers

get_broker

Purpose: Get broker information.

Required Fields:

  • Either broker_id (number) OR loan_id (number) - Must provide one

Important Optional Fields:

  • broker_id (number) - The broker ID (use if you know the broker ID)
  • loan_id (number) - The loan ID (returns the loan's broker staff's broker)

Notes: - Can retrieve by broker_id directly, or by loan_id to get the broker associated with a loan - If using loan_id, returns the broker of the loan's broker staff —

create_broker

Purpose: Create a broker entity.

Required Fields:

  • None (all fields optional, but name recommended)

Important Optional Fields:

  • name (string) - Broker name
  • parent_broker (object) - Parent broker with id (required if broker belongs to parent)
  • address, city, province, zip - Address information
  • phone, fax - Contact information
  • cheque (string) - Cheque name
  • cheque_use_eft (0 or 1) - Use EFT for cheque payments
  • broker_staff_list (array) - Array of broker staff members
  • duplication_mode (0 or 1) - 0=Return duplicate if found, 1=Create anyway

Notes: - Brokers are associated with parent brokers - Can include broker staff when creating

get_broker_staff

Purpose: Get broker staff details.

Required Fields:

  • Either broker_staff_id (number) OR loan_id (number) - Must provide one

Important Optional Fields:

  • broker_staff_id (number) - The broker staff ID (use if you know the staff ID)
  • loan_id (number) - The loan ID (returns the loan's broker staff)

Notes: - Can retrieve by broker_staff_id directly, or by loan_id to get the broker staff associated with a loan —

create_broker_staff

Purpose: Create a broker staff member.

Required Fields:

  • Staff name and broker association (varies by implementation)

Important Optional Fields:

  • Staff name, contact information, commission details

Notes: - Staff members are associated with brokers - Use broker_staff_id when creating loans - Can be created as part of create_broker via broker_staff_list

get_broker_staff_cheque

Purpose: Get broker staff cheque details.

Required Fields:

  • broker_staff_cheque_id (number) - The cheque ID

create_broker_staff_cheque

Purpose: Create a broker staff cheque.

Required Fields:

  • Cheque details and broker staff association

attach_broker_staff_to_loan

Purpose: Assign broker staff to a loan with commission.

Required Fields:

  • loan_id (number) - The loan ID
  • broker_staff_id (number) - The broker staff ID

Important Optional Fields:

  • Commission details

Notes: - Can also set broker_staff_id when creating a loan

📋 Appraiser Management Tools (3 tools)

get_appraiser

Purpose: Get appraiser details.

Required Fields:

  • Either appraiser_id (number) OR loan_id (number) - Must provide one

Important Optional Fields:

  • appraiser_id (number) - The appraiser ID (use if you know the appraiser ID)
  • loan_id (number) - The loan ID (returns the loan's appraiser)

Notes: - Can retrieve by appraiser_id directly, or by loan_id to get the appraiser associated with a loan —

update_appraiser

Purpose: Update appraiser information.

Required Fields:

  • appraiser_id (number) - The appraiser ID

Important Optional Fields:

  • Appraiser details to update

get_appraiser_staff

Purpose: Get appraiser staff details.

Required Fields:

  • Either appraiser_staff_id (number) OR loan_id (number) - Must provide one

Important Optional Fields:

  • appraiser_staff_id (number) - The appraiser staff ID (use if you know the staff ID)
  • loan_id (number) - The loan ID (returns the loan's appraiser staff)

Notes: - Can retrieve by appraiser_staff_id directly, or by loan_id to get the appraiser staff associated with a loan - Use appraiser_staff_id when creating loans

Common Patterns & Best Practices

Field Type Conversions

  • Many numeric fields accept both numbers and strings (e.g., "0" or 0)
  • Boolean fields often accept 0/1, true/false, or "0"/"1"
  • Dates are Unix timestamps (seconds since epoch)

ID Requirements

  • Most "get" operations require the entity ID
  • Use list operations first to find IDs
  • attach_investor_to_loan requires account_id, not investor_id

Duplicate Prevention

  • create_loan automatically checks for duplicates (85% similarity)
  • create_borrower checks for duplicates by name, email, or phone
  • Both return existing records if duplicates found (unless duplication_mode=1)

Workflow Order

  1. Create borrowers first
  2. Create investors and their accounts
  3. Create loans
  4. Attach borrowers to loans
  5. Attach investors to loans
  6. Add property details, existing mortgages, etc.

Caching

  • GET operations are cached (default 300 seconds)
  • Write operations (create/update/attach) automatically clear relevant caches
  • Use response_field_whitelist to reduce response size and improve performance

Total: 41 tools available