Skip to main content
Glama
PeopleSoft MCP Server

PeopleSoft MCP Server

by rgrz

PeopleSoft MCP Server

A Model Context Protocol (MCP) server that enables AI assistants to query and understand PeopleSoft HCM databases. This server provides semantic tools for HR, Payroll, Benefits, Performance, and PeopleTools metadata - allowing natural language questions to be answered with accurate SQL queries.

Features

  • 41 semantic tools covering all major PeopleSoft HCM modules

  • 4 documentation resources for PeopleSoft concepts and query patterns

  • Direct database access via Oracle thin client (no JDBC required)

  • PeopleTools introspection for understanding system architecture

  • Effective dating support built into all queries

Related MCP server: DB MCP (HR CSV to SQLite)

Quick Start

Prerequisites

  • Python 3.11+

  • Oracle Database connectivity to a PeopleSoft HCM 9.2 instance

  • uv package manager (recommended)

Installation

# Clone the repository
git clone <repo-url>
cd peoplesoft-mcp

# Install dependencies
uv sync

Configuration

  1. Copy the example environment file and add your credentials:

cp .env.example .env
  1. Edit .env with your database credentials:

ORACLE_DSN=hostname:port/service_name
ORACLE_USER=your_username
ORACLE_PASSWORD=your_password
  1. Edit .cursor/mcp.json and update the path to your installation.

Running the Server

uv run peoplesoft_server.py

Cursor IDE Integration

The MCP config (.cursor/mcp.json) should look like:

{
  "mcpServers": {
    "peoplesoft": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp_ps/",
        "run",
        "peoplesoft_server.py"
      ]
    }
  }
}

Credentials are loaded from .env automatically - no need to include them in the MCP config.

Available Tools

Schema Introspection (5 tools)

Tool

Description

describe_table

Get table structure, fields, and indexes

list_tables

Search for tables by name pattern

get_translate_values

Decode field codes (XLAT values)

get_table_indexes

View index definitions for performance

get_table_relationships

Find foreign key relationships

HR Module (5 tools)

Tool

Description

get_employee

Get employee details by EMPLID

search_employees

Search employees by name, department, etc.

get_job_history

View job history for an employee

get_org_chart

Get organizational hierarchy

get_department_info

Get department details and headcount

Payroll Module (5 tools)

Tool

Description

get_payroll_results

View payroll calculation results

get_payroll_status

Check payroll processing status

get_accumulator_balances

Get YTD/MTD balances

get_payment_info

Get payment details

list_calendar_runs

List payroll calendar runs

Benefits Module (4 tools)

Tool

Description

get_benefit_elections

View benefit plan elections

get_dependents

Get dependent information

get_beneficiaries

Get beneficiary designations

get_benefit_costs

Calculate benefit costs

Performance Module (3 tools)

Tool

Description

get_performance_reviews

List performance documents

get_review_details

Get detailed review information

search_reviews

Search reviews by criteria

PeopleTools Module (18 tools)

Tool

Description

get_record_definition

Full record structure with fields and keys

search_records

Find records by name or description

get_component_structure

Component pages and navigation

get_page_fields

Fields on a page with record bindings

get_peoplecode

Find PeopleCode on records/fields

get_permission_list_details

Security access for permission lists

get_roles_for_permission_list

Roles containing a permission list

get_process_definition

Process Scheduler job definitions

get_application_engine_steps

AE program structure

get_integration_broker_services

IB service operations

get_message_definition

IB message structure

get_query_definition

PS Query records and fields

get_sql_definition

Get SQL text by SQLID (views, App Engine, PeopleCode)

search_sql_definitions

Search SQL objects by text

search_peoplecode

Search text within PeopleCode

get_field_usage

Impact analysis - where a field is used

get_translate_field_values

All XLAT values for a field

explain_peoplesoft_concept

Explains effective dating, SetID, etc.

Direct Query (1 tool)

Tool

Description

query_peoplesoft_db

Execute custom SQL queries

Available Resources

Resource URI

Description

peoplesoft://schema-guide

Major tables by module

peoplesoft://concepts

Effective dating, EMPLID, SetID, XLAT

peoplesoft://query-examples

SQL query patterns

peoplesoft://peopletools-guide

PeopleTools architecture guide

Project Structure

peoplesoft-mcp/
├── peoplesoft_server.py    # Main MCP server entry point
├── db.py                   # Database connection management
├── tools/                  # Semantic tool modules
│   ├── introspection.py    # Schema discovery tools
│   ├── hr.py               # HR module tools
│   ├── payroll.py          # Payroll module tools
│   ├── benefits.py         # Benefits module tools
│   ├── performance.py      # ePerformance tools
│   └── peopletools.py      # PeopleTools metadata tools
├── tests/                  # Test suites
│   ├── test_business_questions.py   # HR business scenarios
│   └── test_peopletools_questions.py # Technical consultant scenarios
├── docs/                   # Documentation resources
│   ├── peoplesoft_concepts.md
│   ├── peoplesoft_schema_guide.md
│   ├── peopletools_guide.md
│   ├── sql_query_examples.md
│   ├── peopletools-tables-by-tool.md   # Tables required per tool
│   └── migration-analysis.md   # Migration planning notes
└── pyproject.toml          # Project configuration

Running Tests

# Set environment variables
export ORACLE_DSN="hostname:port/service_name"
export ORACLE_USER="username"
export ORACLE_PASSWORD="password"

# Run all tests
uv run pytest tests/ -v -s

# Run specific test suite
uv run pytest tests/test_business_questions.py -v -s
uv run pytest tests/test_peopletools_questions.py -v -s

Example Queries

The MCP enables natural language questions like:

Business Questions:

  • "How many active employees are in each company?"

  • "What is the average salary by department?"

  • "Who reports to manager X?"

  • "Show me employees without a supervisor assigned"

Technical Questions:

  • "What fields does PS_JOB have?"

  • "Where is the DEPTID field used?"

  • "What PeopleCode runs on the JOB record?"

  • "What SQL does HR_ABSV_JOB_EFFDT use?"

  • "Search for SQL objects referencing PS_ABSV_REQUEST"

  • "Explain effective dating in PeopleSoft"

Development

Adding New Tools

  1. Create a new module in tools/ or add to existing module

  2. Define async functions that use db.execute_query()

  3. Add a register_tools(mcp) function

  4. Import and register in peoplesoft_server.py

Key Concepts

  • Effective Dating: Most PeopleSoft tables use EFFDT/EFFSEQ for history

  • SetID: Controls data sharing across business units

  • Translate Values: Short codes decoded via PSXLATITEM

  • EMPLID/EMPL_RCD: Employee ID + employment record number

License

MIT

Changelog

v0.2.1 (2026-03-02)

  • Added get_sql_definition - fetch SQL text by SQLID from PSSQLTEXTDEFN

  • Added search_sql_definitions - search SQL objects by text

  • PeopleTools compatibility: adjusted PSPNLGROUP, PSPNLFIELD, PSAEAPPLDEFN, PSAESTEPDEFN queries for varying column names across PeopleTools versions

  • Added docs/peopletools-tables-by-tool.md - tables required per tool

v0.2.0 (2026-02-28)

  • Added modular tool architecture with 39 semantic tools

  • Added PeopleTools introspection module (16 tools)

  • Added comprehensive test suites (42 tests)

  • Replaced connection pooling with direct connections for reliability

  • Added 4 documentation resources

  • Improved effective dating patterns in all queries

Available Tools

43 tools
describe_tableA
    Get the structure of a PeopleSoft table/record including all fields, 
    their types, lengths, and descriptions.
    
    Use this tool FIRST when you need to understand what fields are available
    in a table before writing queries.
    
    :param table_name: The PeopleSoft record name (e.g., 'PERSONAL_DATA', 'JOB', 'DEPT_TBL').
                      Can include or exclude the 'PS_' prefix.
    :return: List of fields with their properties
    

Inputs: table_name (required).

explain_peoplesoft_conceptB
Provide explanation of PeopleSoft/PeopleTools concepts based on actual
system metadata and configuration.

Args:
    concept: The concept to explain (e.g., 'effective_dating', 'component', 
            'record_types', 'security', 'integration_broker')

Returns:
    Relevant system metadata that illustrates the concept

Inputs: concept (required).

get_accumulator_balancesA
    Get accumulator balances (YTD, MTD, etc.) for an employee.
    
    Accumulators track cumulative values like:
    - Year-to-date earnings
    - Year-to-date taxes
    - Lifetime pension contributions
    - Month-to-date hours worked
    
    :param employee_id: The employee ID (EMPLID)
    :param accum_type: Optional filter by accumulator type (e.g., 'YTD', 'MTD', 'QTD')
    :param calendar_run: Optional calendar run ID. If not provided, returns latest.
    :return: Accumulator balances
    

Inputs: employee_id (required), accum_type, calendar_run.

get_application_engine_stepsA
Get the steps and sections of an Application Engine program.

Args:
    ae_program: The AE program name

Returns:
    Program structure with sections, steps, and actions

Inputs: ae_program (required).

get_beneficiariesA
    Get beneficiary designations for an employee's benefit plans.
    
    :param employee_id: The employee ID (EMPLID)
    :param plan_type: Optional filter by plan type (e.g., '2A' for life insurance)
    :return: Beneficiary designations by plan
    

Inputs: employee_id (required), plan_type.

get_benefit_costsB
    Get benefit cost information including employee and employer contributions.
    
    :param employee_id: The employee ID (EMPLID)
    :param as_of_date: Optional date (YYYY-MM-DD format). Defaults to current date.
    :return: Benefit costs by plan
    

Inputs: employee_id (required), as_of_date.

get_benefit_electionsC
    Get current benefit plan elections for an employee.
    
    Shows active benefit enrollments including:
    - Health plans
    - Life insurance
    - Retirement plans
    - Other voluntary benefits
    
    :param employee_id: The employee ID (EMPLID)
    :return: List of benefit elections with plan details
    

Inputs: employee_id (required).

get_component_pagesA
Get lightweight component-to-pages mapping. Uses only PSPNLGRPDEFN and
PSPNLGROUP with version-safe columns.

Args:
    component_name: The component name (e.g., 'JOB_DATA', 'ABSV_PLAN_TABLE')

Returns:
    Component name, search record, and list of pages with item number and label

Inputs: component_name (required).

get_component_structureA
Get the structure of a PeopleSoft component including its pages,
records, and navigation path.

Args:
    component_name: The component name (e.g., 'JOB_DATA', 'PERSONAL_DATA')

Returns:
    Component definition with pages, records, and menu navigation

Inputs: component_name (required).

get_department_infoB
    Get detailed information about a department including its current employees.
    
    :param department_id: The department ID (DEPTID)
    :return: Department details and employee list
    

Inputs: department_id (required).

get_dependentsB
    Get dependents and beneficiaries for an employee.
    
    Returns:
    - Dependent personal information
    - Relationship to employee
    - Benefits coverage status
    - National ID (if available)
    
    :param employee_id: The employee ID (EMPLID)
    :return: List of dependents with their details
    

Inputs: employee_id (required).

get_employeeA
    Get comprehensive employee profile including personal data, current job, 
    department, and employment status.
    
    This is the primary tool for getting employee information. It returns:
    - Personal details (name, birthdate, address, etc.)
    - Current job information (department, position, manager, etc.)
    - Employment status and dates
    
    :param employee_id: The employee ID (EMPLID)
    :return: Complete employee profile
    

Inputs: employee_id (required).

get_field_usageA
Find all records that use a specific field - useful for impact analysis.

Args:
    field_name: The field name to search for

Returns:
    List of records containing this field and key information

Inputs: field_name (required).

get_integration_broker_servicesC
Get Integration Broker service operations and their configuration.

Args:
    service_name: Optional service name filter

Returns:
    Service definitions with their operations

Inputs: service_name.

get_job_historyA
    Get the complete job history for an employee showing all effective-dated changes.
    
    This shows every job change including:
    - Position changes
    - Department transfers
    - Promotions/demotions
    - Salary changes
    - Status changes (leave, return to work, termination, etc.)
    
    :param employee_id: The employee ID (EMPLID)
    :param limit: Maximum number of history records (default 50)
    :return: Chronological list of job changes
    

Inputs: employee_id (required), limit.

get_message_definitionA
Get the structure of an Integration Broker message.

Args:
    message_name: The message name

Returns:
    Message definition with parts and records

Inputs: message_name (required).

get_org_chartA
    Get organizational hierarchy showing reporting relationships.
    
    You can start from:
    - A specific department (all employees in that dept with their managers)
    - A specific manager (all direct and indirect reports)
    - A company (top-level org structure)
    
    :param department_id: Starting department ID
    :param manager_id: Starting manager's employee ID
    :param company: Company code to filter by
    :param max_depth: Maximum depth of hierarchy to retrieve (default 3)
    :return: Hierarchical organization structure
    

Inputs: company, max_depth, manager_id, department_id.

get_page_field_bindingsA
Get simplified page field bindings: RECNAME, FIELDNAME, FIELDNUM, OCCURSLEVEL only.
Lightweight alternative when full page field properties are not needed.

Args:
    page_name: The page name (e.g., 'JOB_DATA1', 'ABSV_PLAN_TABLE')

Returns:
    Page name and list of record/field bindings

Inputs: page_name (required).

get_page_fieldsB
Get all fields defined on a PeopleSoft page with their properties.

Args:
    page_name: The page name (e.g., 'JOB_DATA1', 'PERSONAL_DATA_1')

Returns:
    Page definition with all field controls and their record/field bindings

Inputs: page_name (required).

get_payment_infoA
    Get payment preparation and payment details for an employee.
    
    :param employee_id: The employee ID (EMPLID)
    :param calendar_run: Optional calendar run ID. If not provided, returns latest.
    :return: Payment details including net pay and payment method
    

Inputs: employee_id (required), calendar_run.

get_payroll_resultsB
    Get earnings and deductions results for an employee's payroll run.
    
    :param employee_id: The employee ID (EMPLID)
    :param calendar_run: Optional calendar run ID. If not provided, returns latest run.
    :param element_type: Optional filter: 'earnings', 'deductions', or 'all' (default)
    :return: Payroll results with earnings and deductions
    

Inputs: employee_id (required), calendar_run, element_type.

get_payroll_statusA
    Get the processing status for all employees in a payroll calendar run.
    
    Status codes:
    - 'I': Identified
    - 'C': Calculated
    - 'F': Finalized
    - 'P': Paid
    
    :param calendar_run: The calendar run ID (CAL_RUN_ID)
    :return: Summary of payroll processing status
    

Inputs: calendar_run (required).

get_peoplecodeA
Get PeopleCode programs attached to a record/field, including the actual source code.

Reads from PSPCMTXT which stores the PeopleCode source as CLOB. Use this to
understand component logic, trace field behavior, or analyze customizations.

Args:
    record_name: The record name (e.g., 'JOB', 'ABSV_REQUEST')
    field_name: Optional field name to filter (e.g., 'EMPLID', 'EFFDT')
    event: Optional event type filter. Common events:
           - RowInit: Fires when row is loaded
           - FieldChange: Fires when field value changes
           - FieldEdit: Validates field before accepting
           - SaveEdit: Validates before save
           - SavePreChange: Runs before database update
           - SavePostChange: Runs after database update
           - RowDelete: Fires when row is deleted
           - RowInsert: Fires when new row inserted
           - SearchInit: Fires on search page load
           - SearchSave: Fires when search is executed
    include_code: If True (default), returns actual PeopleCode source.
                 Set to False for just metadata/listing.
    max_code_length: Maximum characters of code to return per program (default 32000).
                    Use for large programs that may exceed response limits.

Returns:
    List of PeopleCode programs with their events and source code.
    Programs are ordered by field name and event for logical reading.

Example:
    # Get all PeopleCode for ABSV_REQUEST record
    get_peoplecode("ABSV_REQUEST")
    
    # Get just FieldChange events for BEGIN_DT field
    get_peoplecode("ABSV_REQUEST", "BEGIN_DT", "FieldChange")
    
    # List all events without code (for discovery)
    get_peoplecode("JOB", include_code=False)

Inputs: record_name (required), event, field_name, include_code, +1 more.

get_performance_reviewsA
    Get performance appraisals for an employee.
    
    Status codes:
    - 'INP': In Progress
    - 'COMP': Completed
    - 'CANC': Cancelled
    - 'PEND': Pending
    
    :param employee_id: The employee ID (EMPLID)
    :param year: Optional filter by review year
    :param status: Optional filter by status code
    :return: List of performance reviews
    

Inputs: employee_id (required), year, status.

get_permission_list_detailsC
Get details of a permission list including pages, components, and query access.

Args:
    permission_list: The permission list name

Returns:
    Permission list definition with component and page access

Inputs: permission_list (required).

get_process_definitionB
Get process scheduler definitions.

Args:
    process_name: Optional specific process name
    process_type: Optional filter by type (e.g., 'SQR Report', 'Application Engine')

Returns:
    Process definitions with their configuration

Inputs: process_name, process_type.

get_query_definitionB
Get a PS Query definition including its records, fields, and criteria.

Args:
    query_name: The query name

Returns:
    Query definition with records, fields, and criteria

Inputs: query_name (required).

get_record_definitionA
Get complete definition of a PeopleSoft record including all fields,
keys, and properties. Essential for understanding data structures.

Args:
    record_name: The record name (e.g., 'JOB', 'PERSONAL_DATA')
                Will automatically add PS_ prefix if not present

Returns:
    Record metadata including type, fields, keys, and parent record

Inputs: record_name (required).

get_review_detailsB
    Get detailed ratings, goals, and comments for a specific performance review.
    
    :param appraisal_id: The appraisal ID (EP_APPR_ID)
    :return: Complete review details including sections, items, and ratings
    

Inputs: appraisal_id (required).

get_roles_for_permission_listB
Find all roles that include a specific permission list.

Args:
    permission_list: The permission list name

Returns:
    List of roles containing this permission list

Inputs: permission_list (required).

get_sql_definitionA
Get the SQL text for a PeopleSoft SQL object by SQLID.

PSSQLTEXTDEFN stores SQL used by views, App Engine programs, and PeopleCode
(SQL.SQLID). Long SQL is split across multiple rows by SEQNUM.

Args:
    sql_id: The SQL object ID (e.g. 'HR_ABSV_JOB_EFFDT', 'GP_PIN_SELECT')
    max_length: Maximum total characters to return (default 64000).
                Use to avoid huge responses for very long SQL.

Returns:
    SQL definition with sql_text (concatenated from all SEQNUM rows),
    sql_type, market, and row_count.

Example:
    get_sql_definition("HR_ABSV_JOB_EFFDT")

Inputs: sql_id (required), max_length.

get_table_indexesA
    Get the index keys for a PeopleSoft table to help write efficient queries.
    
    Understanding indexes helps you:
    - Write WHERE clauses that use indexed fields for better performance
    - Understand the logical key structure of a table
    - Know which fields uniquely identify a row
    
    Common PeopleSoft key patterns:
    - Simple: EMPLID (employee ID only)
    - Effective-dated: EMPLID, EMPL_RCD, EFFDT, EFFSEQ
    - SetID-based: SETID, DEPTID, EFFDT
    
    :param table_name: The PeopleSoft record name (e.g., 'JOB', 'PERSONAL_DATA')
    :return: List of indexes with their key fields
    

Inputs: table_name (required).

get_table_relationshipsA
    Find tables related to the specified table by analyzing shared key fields.
    
    This helps discover:
    - Parent/child relationships
    - Common join patterns
    - Related configuration tables
    
    :param table_name: The PeopleSoft record name to analyze
    :return: List of potentially related tables grouped by relationship type
    

Inputs: table_name (required).

get_translate_field_valuesC
Get all translate values for a field with their effective dates.

Args:
    field_name: The field name that uses translate values

Returns:
    All translate values with descriptions and effective dates

Inputs: field_name (required).

get_translate_valuesA
    Get all valid translate values for a PeopleSoft field.
    
    Many PeopleSoft fields use single or double letter codes that have
    specific meanings. This tool decodes those values.
    
    Common examples:
    - SEX: 'M' = Male, 'F' = Female
    - HR_STATUS: 'A' = Active, 'I' = Inactive
    - EMPL_STATUS: 'A' = Active, 'T' = Terminated, 'L' = Leave, etc.
    - MAR_STATUS: 'S' = Single, 'M' = Married, 'D' = Divorced
    
    :param field_name: The field name to look up (e.g., 'SEX', 'HR_STATUS', 'EMPL_STATUS')
    :return: List of valid values with their short and long descriptions
    

Inputs: field_name (required).

list_calendar_runsA
    List payroll calendar runs with their status.
    
    :param pay_entity: Optional filter by pay entity
    :param year: Optional filter by year
    :param status: Optional filter by status ('open', 'closed', 'finalized')
    :param limit: Maximum results (default 20)
    :return: List of calendar runs
    

Inputs: year, limit, status, pay_entity.

list_tablesA
    Search for PeopleSoft tables/records by name pattern or module.
    
    :param pattern: Optional search pattern (e.g., 'EMPLOYEE', 'JOB', 'GP_RSLT').
                   Searches with wildcards automatically.
    :param module: Optional module filter. Values:
                  - 'HR' or 'CORE': Core HR tables (PERSONAL_DATA, JOB, DEPT, etc.)
                  - 'GP' or 'PAYROLL': Global Payroll tables (GP_*)
                  - 'EP' or 'PERFORMANCE': ePerformance tables (EP_*)
                  - 'BN' or 'BENEFITS': Benefits tables (BEN_*, DEPENDENT_*)
                  - 'SYSTEM': PeopleTools system tables (PS* without underscore)
    :param limit: Maximum number of results (default 50)
    :return: List of matching tables with descriptions
    

Inputs: limit, module, pattern.

query_peoplesoft_dbA
Query PeopleSoft Oracle Database directly.

When working with a PeopleSoft database, follow these guidelines in order:

1. FIRST, always check the record structure and fields:
   - Use: SELECT RECNAME, FIELDNAME FROM PSRECFIELD WHERE RECNAME = 'YOUR_TABLE'
   - This shows all fields in a record/table and helps prevent invalid field errors

2. SECOND, check field properties and translations:
   - For field details: SELECT * FROM PSDBFIELD WHERE FIELDNAME = 'YOUR_FIELD'
   - For code translations: 
       * ALWAYS check PSXLATITEM and PSXLATITEMLANG for single/double letter codes
       * Example: 'M'/'F' for SEX, 'SP'/'C' for RELATIONSHIP, 'Y'/'N' for flags
       * Query: SELECT FIELDNAME, FIELDVALUE, XLATLONGNAME, XLATSHORTNAME 
               FROM PSXLATITEM 
               WHERE FIELDNAME = 'YOUR_FIELD'
   - Understanding field properties ensures correct data handling

3. THIRD, review table indexes for performance:
   - Use: SELECT * FROM PSKEYDEFN WHERE RECNAME = 'YOUR_TABLE'
   - Knowing indexes helps write efficient queries using indexed fields

4. FINALLY, write your query using the discovered structure
   - Example finding employee data:
     1. Check PSRECFIELD for PS_PERSONAL_DATA fields
     2. Look up important fields in PSDBFIELD
     3. Check PSKEYDEFN for PS_PERSONAL_DATA indexes
     4. Write optimized query using indexed fields
     5. Don't forget to join with PSXLATITEM for any code fields

AVAILABLE RESOURCES:
- Use describe_table() to get table structure
- Use list_tables() to search for tables
- Use get_translate_values() to decode field codes
- Use get_table_indexes() for performance optimization

:param sql_query: SQL query to execute (e.g., SELECT * FROM PS_EMPLOYEE WHERE EMPLID = :1)
:param parameters: List of query parameters (optional)
:return: A dictionary containing query results or an error message

Inputs: sql_query (required), parameters.

search_employeesA
    Search for employees by various criteria.
    
    :param name: Search by employee name (partial match supported)
    :param department: Filter by department ID
    :param company: Filter by company code
    :param location: Filter by location code
    :param job_code: Filter by job code
    :param status: Filter by status: 'active' (default), 'inactive', 'terminated', or 'all'
    :param limit: Maximum results to return (default 50)
    :return: List of matching employees with basic info
    

Inputs: name, limit, status, company, +3 more.

search_peoplecodeA
Search for text within PeopleCode programs.

Args:
    search_term: Text to search for in PeopleCode
    search_in: Where to search - 'all', 'record', 'component', 'appengine'

Returns:
    List of PeopleCode locations containing the search term

Inputs: search_term (required), search_in.

search_recordsB
Search for PeopleSoft records by name or description.

Args:
    search_term: Partial name or description to search for
    record_type: Optional filter by type (0=Table, 1=View, 2=Derived, 7=Temp)

Returns:
    List of matching records with their types and descriptions

Inputs: search_term (required), record_type.

search_reviewsB
    Search performance reviews by various criteria.
    
    :param reviewer_id: Filter by reviewer's employee ID
    :param department: Filter by employee's department
    :param status: Filter by status ('INP', 'COMP', 'CANC', 'PEND')
    :param year: Filter by review year
    :param limit: Maximum results (default 50)
    :return: List of matching reviews
    

Inputs: year, limit, status, department, +1 more.

search_sql_definitionsA
Search for SQL object IDs whose text contains the given term.

Useful for discovering which SQL objects reference a table, field, or
other identifier. Does not return full SQL text—use get_sql_definition
for that.

Args:
    search_term: Text to search for in SQL (e.g. 'PS_JOB', 'ABSV_REQUEST')
    limit: Maximum number of SQLIDs to return (default 50)

Returns:
    List of matching SQLIDs with sql_type and market.

Example:
    search_sql_definitions("PS_ABSV_REQUEST")

Inputs: search_term (required), limit.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 43 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, with detailed descriptions that guide usage. Minor overlap exists between get_translate_values and get_translate_field_values, and between get_beneficiaries and get_dependents, but these are still distinguishable.

    Naming Consistency4/5

    Tools generally follow a verb_noun pattern, but mix prefixes like 'get_', 'search_', 'list_', 'explain_', and 'query_'. This is mostly consistent but lacks a unified convention, e.g., 'list_tables' vs 'search_records'.

    Tool Count3/5

    43 tools is on the high side for a single server, covering a broad domain. While each tool serves a specific purpose, the count may feel overwhelming. Could potentially be consolidated, especially for related metadata queries.

    Completeness4/5

    The tool set covers a wide range of PeopleSoft functionality: employee data, payroll, benefits, performance, metadata, and integration. Minor gaps exist, such as no dedicated create/update tools for HR data (except via raw SQL), but overall it's comprehensive for an exploration and querying server.

    Maintenance

    ActivityNo data
    ResponsivenessSyncing

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP (Model Context Protocol) server that exposes natural language to SQL functionality, allowing any MCP-compatible client to convert plain English questions into SQL queries for database interaction using AI.
      3
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An open-source MCP server that imports HR CSV data into an in-memory SQLite database for structured querying and metadata retrieval. It enables users to perform read-only SQL queries and structured searches on employee data through natural language.
      MIT
    • -
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that bridges AI assistants with SQL databases, enabling natural language querying across multiple database types with built-in optimization and security.
      3
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for interacting with an HR database, enabling querying employee data and HR operations via natural language.
      -