npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@douglaslinsmeyer/infor-mcp-server

v1.11.1

Published

MCP server for accessing Infor M3 tenant information via ION API

Downloads

90

Readme

Infor MCP Server

An MCP (Model Context Protocol) server for accessing Infor M3 tenant information via ION API. This server enables AI assistants like Claude to interact with your Infor M3 system.

Quick Start

Prerequisites

  1. Infor ION API Key: You need a .ionapi file from your Infor ION API setup
  2. Node.js: Version 18 or higher installed on your system
  3. Claude Desktop or Claude Code: An MCP-compatible AI assistant

Setup Instructions

Claude Desktop Configuration

Claude Desktop stores MCP configurations in:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Method 1: Using Complete .ionapi JSON (Recommended)

  1. Copy your entire .ionapi file content
  2. Edit the Claude Desktop config file and add:
{
  "mcpServers": {
    "infor-m3": {
      "command": "npx",
      "args": ["-y", "@douglaslinsmeyer/infor-mcp-server"],
      "env": {
        "IONAPI_KEY": "{\"ti\":\"YOUR_TENANT_ID\",\"cn\":\"Connection Name\",\"ci\":\"YOUR_CLIENT_ID\",\"cs\":\"YOUR_CLIENT_SECRET\",\"iu\":\"https://your-ionapi.inforcloudsuite.com\",\"pu\":\"https://your-sso.inforcloudsuite.com/tenant/as/\",\"oa\":\"authorization.oauth2\",\"ot\":\"token.oauth2\",\"or\":\"revoke_token.oauth2\",\"sc\":[\"Infor-ION\",\"Infor-M3\"],\"v\":\"1.1\",\"saak\":\"YOUR_SAAK\",\"sask\":\"YOUR_SASK\"}"
      }
    }
  }
}

Note: The IONAPI_KEY value must be a single-line JSON string with escaped quotes.

Method 2: Using Individual Environment Variables

{
  "mcpServers": {
    "infor-m3": {
      "command": "npx",
      "args": ["-y", "@douglaslinsmeyer/infor-mcp-server"],
      "env": {
        "INFOR_TENANT_ID": "YOUR_TENANT_ID",
        "INFOR_CLIENT_ID": "YOUR_CLIENT_ID",
        "INFOR_CLIENT_SECRET": "YOUR_CLIENT_SECRET",
        "INFOR_ION_BASE_URL": "https://your-ionapi.inforcloudsuite.com",
        "INFOR_OAUTH_URL": "https://your-sso.inforcloudsuite.com/tenant/as/",
        "INFOR_SAAK": "YOUR_SERVICE_ACCOUNT_ACCESS_KEY",
        "INFOR_SASK": "YOUR_SERVICE_ACCOUNT_SECRET_KEY",
        "INFOR_SCOPES": "Infor-ION,Infor-M3"
      }
    }
  }
}

Method 3: Using Config Object (Legacy)

{
  "mcpServers": {
    "infor-m3": {
      "command": "npx",
      "args": ["-y", "@douglaslinsmeyer/infor-mcp-server"],
      "config": {
        "ionApiKey": {
          "ti": "YOUR_TENANT_ID",
          "cn": "Connection Name",
          "ci": "YOUR_CLIENT_ID",
          "cs": "YOUR_CLIENT_SECRET",
          "iu": "https://your-ionapi.inforcloudsuite.com",
          "pu": "https://your-sso.inforcloudsuite.com/tenant/as/",
          "oa": "authorization.oauth2",
          "ot": "token.oauth2",
          "or": "revoke_token.oauth2",
          "sc": ["Infor-ION", "Infor-M3"],
          "v": "1.1",
          "saak": "YOUR_SAAK",
          "sask": "YOUR_SASK"
        }
      }
    }
  }
}

Enabling Safe Mode (Prevents Write Operations)

Add the safe mode environment variables to any of the above configurations:

{
  "mcpServers": {
    "infor-m3": {
      "command": "npx",
      "args": ["-y", "@douglaslinsmeyer/infor-mcp-server"],
      "env": {
        "IONAPI_KEY": "YOUR_IONAPI_JSON_STRING",
        "INFOR_MCP_SAFE_MODE": "true",
        "INFOR_MCP_SAFE_MODE_STRICT": "false",
        "INFOR_MCP_AUDIT_LOG": "false"
      }
    }
  }
}

After updating the configuration, restart Claude Desktop for changes to take effect.

Claude Code Setup

Claude Code uses the command-line interface for MCP configuration.

Method 1: Using Complete .ionapi JSON

# Copy your .ionapi file content and use it directly
claude mcp add infor-m3 \
  -e IONAPI_KEY='{"ti":"YOUR_TENANT","cn":"Connection","ci":"CLIENT_ID","cs":"SECRET","iu":"https://ionapi.com","pu":"https://sso.com/as/","oa":"authorization.oauth2","ot":"token.oauth2","or":"revoke_token.oauth2","sc":["Infor-ION","Infor-M3"],"v":"1.1","saak":"SAAK","sask":"SASK"}' \
  -- npx -y @douglaslinsmeyer/infor-mcp-server

Method 2: Using .ionapi File

# Read from a file
claude mcp add infor-m3 \
  -e IONAPI_KEY="$(cat /path/to/your.ionapi)" \
  -- npx -y @douglaslinsmeyer/infor-mcp-server

Method 3: Using Individual Environment Variables

claude mcp add infor-m3 \
  -e INFOR_TENANT_ID="YOUR_TENANT" \
  -e INFOR_CLIENT_ID="YOUR_CLIENT_ID" \
  -e INFOR_CLIENT_SECRET="YOUR_SECRET" \
  -e INFOR_ION_BASE_URL="https://your-ionapi.com" \
  -e INFOR_OAUTH_URL="https://your-sso.com/tenant/as/" \
  -e INFOR_SAAK="YOUR_SAAK" \
  -e INFOR_SASK="YOUR_SASK" \
  -e INFOR_SCOPES="Infor-ION,Infor-M3" \
  -- npx -y @douglaslinsmeyer/infor-mcp-server

With Safe Mode Enabled

claude mcp add infor-m3 \
  -e IONAPI_KEY="$(cat /path/to/your.ionapi)" \
  -e INFOR_MCP_SAFE_MODE="true" \
  -- npx -y @douglaslinsmeyer/infor-mcp-server

Environment Variables

Authentication Variables

| Variable | Description | Required | |----------|-------------|----------| | IONAPI_KEY | Complete .ionapi JSON content as a string | Yes* | | INFOR_TENANT_ID | Infor tenant identifier | Yes** | | INFOR_CLIENT_ID | OAuth client ID | Yes** | | INFOR_CLIENT_SECRET | OAuth client secret | Yes** | | INFOR_ION_BASE_URL | ION API base URL | Yes** | | INFOR_OAUTH_URL | OAuth token endpoint URL | Yes** | | INFOR_SAAK | Service Account Access Key | Optional | | INFOR_SASK | Service Account Secret Key | Optional | | INFOR_SCOPES | Comma-separated OAuth scopes | Optional |

* Required if not using individual variables
** Required if not using IONAPI_KEY

Safe Mode Variables

| Variable | Description | Default | |----------|-------------|---------| | INFOR_MCP_SAFE_MODE | Enable safe mode to block write operations | false | | INFOR_MCP_SAFE_MODE_STRICT | Block unknown operations in safe mode | false | | INFOR_MCP_SAFE_MODE_WHITELIST | Comma-separated list of allowed transactions (e.g., "CRS610MI/Get,MMS200MI/List") | None | | INFOR_MCP_AUDIT_LOG | Log all operations for auditing | false |

Data Fabric Variables

| Variable | Description | Default | |----------|-------------|---------| | INFOR_DATAFABRIC_MAX_RECORDS | Maximum records for Data Fabric queries | 10000 | | INFOR_DATAFABRIC_TIMEOUT | Query timeout in milliseconds | 300000 |

Session Management Variables

| Variable | Description | Default | |----------|-------------|---------| | INFOR_DEFAULT_DIVISION | Default division for operations | None | | INFOR_DEFAULT_FACILITY | Default facility for operations | None | | INFOR_DEFAULT_WAREHOUSE | Default warehouse for operations | None | | INFOR_DEFAULT_COMPANY | Default company code | 001 |

Features

  • 👥 100+ Persona-Based Tools: Specialized tools for Finance, Supply Chain, Sales, Production, and Executive users
  • 🔒 Safe Mode: Prevent accidental write operations with configurable safe mode
  • 🧠 Smart Session Management: Context-aware operations with role-based defaults and preferences
  • ⚡ Advanced Data Handling: Two-tier caching, pagination, and aggregation for 25,000+ record datasets
  • 🚀 Response Chunking: Automatic chunking for large API responses to prevent Claude context overflow
  • 🔐 OAuth 2.0 Authentication: Secure authentication using Infor .ionapi key format
  • 🔍 API Discovery Tools: Explore available endpoints and operations
  • 📊 Cross-Functional Analytics: Order-to-Cash, Procure-to-Pay, and multi-module analysis
  • 🛠️ Generic API Access: Query any M3 API endpoint with the generic query tool
  • 🔄 Automatic Token Management: Token refresh and management handled automatically
  • 📱 Multi-Platform Support: Works with Claude Desktop, Claude Code, and other MCP-compatible AI assistants
  • 📈 Data Fabric Integration: Query Data Lake with SQL, validated against Data Catalog metadata

Installation

Using npx (Recommended)

No installation needed! You can run directly with npx:

npx @douglaslinsmeyer/infor-mcp-server

Local Installation

npm install @douglaslinsmeyer/infor-mcp-server

From Source

git clone https://github.com/douglaslinsmeyer/infor-ion-mcp
cd infor-ion-mcp
npm install
npm run build

Configuration

The server accepts ION API configuration in multiple ways:

Method 1: Environment Variable (for Claude Code CLI)

Set the IONAPI_KEY environment variable with your complete .ionapi JSON content.

Method 2: Individual Environment Variables

INFOR_TENANT_ID=your_tenant_id
INFOR_CLIENT_ID=your_client_id
INFOR_CLIENT_SECRET=your_client_secret
INFOR_ION_URL=https://your-ionapi-url.com
INFOR_PU_URL=https://your-sso-url.com/tenant/as/
INFOR_SAAK=your_service_account_access_key
INFOR_SASK=your_service_account_secret_key
INFOR_SCOPES=Infor-ION,Infor-M3

Method 3: Configuration Object (for Claude Desktop)

Pass the ION API key in the following JSON format:

{
  "ti": "tenant_id",
  "cn": "connection_name", 
  "ci": "client_id",
  "cs": "client_secret",
  "iu": "https://your-ionapi-url.com",
  "pu": "https://your-sso-url.com/tenant/as/",
  "saak": "service_account_access_key",
  "sask": "service_account_secret_key",
  ...
}

Setup Instructions

Prerequisites

  1. Infor ION API Key: You need a .ionapi file from your Infor ION API setup
  2. Node.js: Version 18 or higher installed on your system

Claude Code Setup

Claude Code stores MCP server configurations in a JSON file. To add the Infor MCP server:

  1. Locate your Claude Code configuration file:

    • On macOS/Linux: ~/.config/claude/claude.json
    • On Windows: %APPDATA%\claude\claude.json
  2. Edit the file and add the MCP server configuration under mcpServers:

{
  "mcpServers": {
    "infor-m3": {
      "command": "npx",
      "args": ["-y", "@douglaslinsmeyer/infor-mcp-server"],
      "config": {
        "ionApiKey": {
          "ti": "your_tenant_id",
          "cn": "your_connection_name",
          "ci": "your_client_id",
          "cs": "your_client_secret",
          "iu": "https://your-ionapi-url.com",
          "pu": "https://your-sso-url.com/tenant/as/",
          "oa": "authorization.oauth2",
          "ot": "token.oauth2",
          "or": "revoke_token.oauth2",
          "sc": ["Infor-ION", "Infor-M3"],
          "ev": "your_event_version",
          "v": "1.1",
          "saak": "your_service_account_access_key",
          "sask": "your_service_account_secret_key"
        }
      }
    }
  }
}
  1. Save the file and restart Claude Code

Tip: You can copy the entire content of your .ionapi file and paste it as the value for ionApiKey.

Claude Desktop Setup

  1. Open Claude Desktop
  2. Click on the settings icon (gear) in the bottom left
  3. Navigate to "Developer" → "Edit Config"
  4. Add the MCP server configuration:
{
  "mcpServers": {
    "infor-m3": {
      "command": "npx",
      "args": [
        "-y",
        "@douglaslinsmeyer/infor-mcp-server"
      ],
      "config": {
        "ionApiKey": {
          // Paste your entire .ionapi JSON object here
        }
      }
    }
  }
}
  1. Save and restart Claude Desktop

Claude Web (via Browser Extension)

The Claude web interface doesn't directly support MCP servers. However, you can:

  1. Use Claude Desktop instead for MCP functionality
  2. Or use the API Explorer CLI tool separately and paste results into Claude web

Configuration Options

Using NPX (Recommended - No Installation Required)

{
  "command": "npx",
  "args": ["-y", "@douglaslinsmeyer/infor-mcp-server"]
}

Using Global Installation

First install globally:

npm install -g @douglaslinsmeyer/infor-mcp-server

Then configure:

{
  "command": "infor-mcp"
}

Using Local Installation

{
  "command": "node",
  "args": ["/absolute/path/to/node_modules/@douglaslinsmeyer/infor-mcp-server/dist/index.js"]
}

Available Tools

The server provides 100+ specialized tools organized by user persona, plus general API discovery and M3-specific tools.

Persona-Based Tools

Session Management (5 tools)

  • session_set_context - Set user context with role, division, warehouse, facility
  • session_get_context - Get current session settings
  • session_clear_context - Reset to defaults
  • session_update_preferences - Update user preferences
  • session_get_defaults - Get role-specific defaults

Finance Tools (15 tools)

  • GL Management: Balance queries, transaction lists, account analysis
  • AR/AP: Customer balances, aging analysis, payment tracking
  • Cash Management: Cash position, working capital, liquidity analysis
  • Period Analysis: Period comparisons, budget variance, trend analysis

Supply Chain Tools (19 tools)

  • Inventory: Balance checks, availability, health metrics, ABC/FSN analysis
  • Order Fulfillment: Order tracing (CO→MO→PO), ATP checks, delivery performance
  • Supply Planning: Multi-level BOM explosion, supply network visualization
  • Warehouse Ops: Utilization metrics, picking/receiving performance

Sales Tools (7 tools)

  • Customer Analytics: Performance metrics, profitability, RFM segmentation
  • Pipeline Management: Order pipeline, conversion rates, quote analysis
  • Pricing: Price analysis, discount impact, margin optimization

Production Tools (9 tools)

  • MO Management: Status summaries, schedule adherence, material availability
  • Capacity Planning: Utilization analysis, bottleneck identification
  • Quality Metrics: Defect rates, first pass yield, OEE calculations

Executive Tools (9 tools)

  • KPI Dashboards: Consolidated metrics with targets and trends
  • Cross-Functional: Order-to-Cash, Procure-to-Pay cycle analysis
  • Strategic Analysis: Trend forecasting, risk indicators, balanced scorecards

API Discovery Tools

discover_api_suites

Discover available API suites in the Infor tenant.

  • searchCriteria (optional): Filter suites by name, description, or context
  • pageSize (optional): Number of results (default: 100)

get_api_suite_details

Get detailed information about a specific API suite.

  • suiteContext (required): Suite context ID (e.g., "infor.m3.ca")

discover_products

Discover available products in the Infor tenant.

  • searchCriteria (optional): Filter products
  • pageSize (optional): Number of results (default: 100)

search_operations

Search for API operations across all products and suites.

  • searchCriteria (optional): Search by summary, path, or parameters
  • suiteContext (optional): Filter by suite
  • logicalIdPrefix (optional): Filter by product (e.g., "lid://infor.m3")
  • pageSize (optional): Number of results (default: 50)

M3-Specific Tools

m3_api_call

Execute a generic M3 API call using the m3api-rest interface.

  • program (required): M3 API program (e.g., "CRS610MI")
  • transaction (required): Transaction name (e.g., "Get", "List")
  • record (optional): Input parameters
  • maxrecs (optional): Max records for List operations (default: 50)
  • includeMetadata (optional): Include metadata in response
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

customer_get

Get customer information from M3.

  • customerNumber (required): Customer number (CUNO)

customer_list

List customers with optional filters.

  • customerName (optional): Filter by name (partial match)
  • customerStatus (optional): Filter by status
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

item_get

Get item/product information from M3.

  • itemNumber (required): Item number (ITNO)

item_list

List items/products with optional filters.

  • itemName (optional): Filter by name (partial match)
  • itemType (optional): Filter by type
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

item_search_by_description

Search for items using fuzzy/partial matching on item descriptions (FUDS field). Uses M3 SearchItem API for intelligent text matching.

  • searchQuery (required): Search text to match against item descriptions. Supports fuzzy matching and partial terms.
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

order_get

Get customer order information.

  • orderNumber (required): Order number (ORNO)

order_list

List customer orders with filters.

  • customerNumber (optional): Filter by customer
  • orderStatus (optional): Filter by status
  • fromDate (optional): From date (YYYYMMDD)
  • toDate (optional): To date (YYYYMMDD)
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

mo_list

List Manufacturing Orders (MOs) with optional filters.

  • facility (optional): Filter by facility (FACI)
  • itemNumber (optional): Filter by item number (ITNO)
  • moNumber (optional): Filter by MO number (MFNO) - supports partial matching
  • moStatus (optional): Filter by MO status (WHST) - e.g., "20" for Released, "90" for Closed
  • plannedStartDate (optional): Filter by planned start date (STDT) in YYYYMMDD format
  • plannedFinishDate (optional): Filter by planned finish date (FIDT) in YYYYMMDD format
  • responsible (optional): Filter by responsible person (RESP)
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

mo_get

Get detailed Manufacturing Order (MO) information.

  • facility (required): Facility (FACI)
  • moNumber (required): Manufacturing Order number (MFNO)
  • productNumber (optional): Product number (PRNO) - can be auto-retrieved
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

mop_list

List Manufacturing Order Proposals (MOPs) with optional filters.

  • facility (optional): Filter by facility (FACI)
  • itemNumber (optional): Filter by item number (ITNO)
  • mopNumber (optional): Filter by MOP number (MOPO) - supports partial matching
  • mopStatus (optional): Filter by MOP status (MPST) - e.g., "10" for Planning, "20" for Approved
  • plannedOrderDate (optional): Filter by planned order date (PLDT) in YYYYMMDD format
  • demandOrderCategory (optional): Filter by demand order category (DOCA)
  • buyer (optional): Filter by buyer (BUYE)
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

mop_get

Get detailed Manufacturing Order Proposal (MOP) information.

  • mopNumber (required): Manufacturing Order Proposal number (MOPO)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

warehouse_list

List warehouses from M3.

  • facility (optional): Filter by facility
  • maxRecords (optional): Max records (default: 50)
  • chunkIndex (optional): Index of chunk to return for large responses (0-based, default: 0)

purchase_order_get

Get purchase order information.

  • purchaseOrderNumber (required): PO number (PUNO)

Schema-Aware Tools

get_api_schema

Get schema information for an M3 API program.

  • program (required): M3 API program name (e.g., "CRS610MI")
  • operation (optional): Specific operation to get details for

validate_api_params

Validate parameters against M3 API schema.

  • program (required): M3 API program name (e.g., "CRS610MI")
  • operation (required): Operation name (e.g., "GetBasicData")
  • parameters (required): Parameters to validate

smart_m3_call

Make an M3 API call with automatic schema validation and helpful error messages.

  • program (required): M3 API program name (e.g., "CRS610MI")
  • operation (required): Operation name (e.g., "GetBasicData")
  • parameters (optional): API parameters
  • maxrecs (optional): Maximum records for List operations (default: 50)
  • includeMetadata (optional): Include metadata in response

list_api_fields

List available fields/parameters for an M3 API operation.

  • program (required): M3 API program name (e.g., "CRS610MI")
  • operation (required): Operation name (e.g., "GetBasicData")

list_api_operations

List all available operations for an M3 API program.

  • program (required): M3 API program name (e.g., "CRS610MI")

Generic Query Tool

query_m3

Execute any query against the Infor API.

  • endpoint (required): API endpoint path
  • method (optional): HTTP method (default: GET)
  • data (optional): Request body for POST/PUT

API Explorer CLI

The project includes a CLI tool to explore available Infor APIs:

# Get API metadata version
npm run explore -- -i /path/to/your.ionapi version

# List all API suites
npm run explore -- -i /path/to/your.ionapi suites

# Search for specific API suites
npm run explore -- -i /path/to/your.ionapi suites -s "M3"

# Get details for a specific suite
npm run explore -- -i /path/to/your.ionapi suite infor.m3.ca

# List all products
npm run explore -- -i /path/to/your.ionapi products

# Search for operations
npm run explore -- -i /path/to/your.ionapi operations -q "customer"

# List M3-specific APIs
npm run explore -- -i /path/to/your.ionapi m3-apis

# Search M3 operations
npm run explore -- -i /path/to/your.ionapi m3-apis -q "order"

Development

# Run in development mode
npm run dev

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Lint code
npm run lint

# Type check
npm run typecheck

# Update Data Catalog metadata (run periodically)
npm run fetch-metadata

Architecture

The server is organized into several key modules:

  • Persona Tools (src/tools/): Specialized tools for each user role
  • Session Management (src/tools/session-tools.ts): Context and preference management
  • Cache Manager (src/services/cache-manager.ts): Two-tier caching system
  • Response Manager (src/utils/response-manager.ts): Smart chunking and aggregation
  • Pagination Helper (src/utils/pagination-helper.ts): Cursor and offset pagination
  • M3 API Helper (src/utils/m3-api-helper.ts): Standardized M3 API execution

Updating Data Catalog Metadata

The Data Fabric tools use cached metadata from the Data Catalog to validate SQL queries. This metadata is stored in src/data/datacatalog-metadata.json and is committed to version control.

To update the metadata:

  1. Ensure your IONAPI_KEY environment variable is set
  2. Run npm run fetch-metadata
  3. Commit the updated datacatalog-metadata.json file

This should be done periodically when table schemas change in your Data Lake.

Common M3 API Programs

The MCP server includes tools for common M3 operations:

  • CRS610MI - Customer management
  • MMS200MI - Item/Product management
  • OIS100MI - Customer Order management
  • MMS005MI - Warehouse management
  • PPS200MI - Purchase Order management

You can also use the m3_api_call tool to access any other M3 API program/transaction combination.

How to Use with Claude

Once configured, you can use persona-based workflows or direct API access.

Persona-Based Workflows

Finance User Example

You: "Set my context as a finance user for division 100"
Claude: [Uses session_set_context with finance role]

You: "What's our current working capital position?"
Claude: [Uses finance_working_capital to calculate current assets vs liabilities]

You: "Show me AR aging for customers with balance over $10,000"
Claude: [Uses finance_ar_aging_analysis with filters]

Supply Chain User Example

You: "I'm a supply chain manager. Show inventory health for warehouse 200"
Claude: [Sets context and uses supply_chain_inventory_health with ABC/FSN analysis]

You: "Trace order CO12345 through the supply chain"
Claude: [Uses supply_chain_order_trace to show CO→MO→PO→Inventory flow]

You: "Check if we can fulfill 1000 units of ITEM001 by next week"
Claude: [Uses supply_chain_atp_check to verify availability]

Executive Dashboard Example

You: "Give me the executive KPI dashboard for this month"
Claude: [Uses executive_kpi_dashboard with standard metrics]

You: "Analyze our order-to-cash cycle performance"
Claude: [Uses executive_order_to_cash to identify bottlenecks]

You: "Show revenue trends with 3-month forecast"
Claude: [Uses executive_trend_analysis with forecast enabled]

Direct API Access

  • Discover APIs: "What API suites are available in my Infor system?"
  • List Companies: "Show me all companies configured in M3"
  • Get Customer Info: "Get details for customer 10000"
  • Search Items: "Find all items with 'WIDGET' in the name"
  • List Orders: "Show me all orders from the last 30 days"
  • Explore Operations: "What customer-related APIs are available?"
  • Schema Discovery: "What fields are available for the customer API?"
  • Validate Parameters: "Check if these customer parameters are valid before calling the API"

Example Conversations

You: "What companies are configured in M3?"
Claude: I'll check the companies configured in your M3 system using the MCP server...
[Claude uses the m3_api_call tool with MNS095MI/List]
You: "Get information about customer ABC123"
Claude: I'll retrieve the customer information for ABC123...
[Claude uses the customer_get tool]
You: "List all customers, but I need to see them in chunks since there are many"
Claude: I'll get the customer list in chunks. Let me start with the first chunk...
[Claude uses customer_list with chunkIndex: 0, then can get subsequent chunks]

Response Chunking

For large datasets, the server automatically chunks responses to prevent context overflow:

  • Automatic Detection: Responses >100KB or >50 records are automatically chunked
  • Navigation: Each chunk shows "Chunk 1 of 3" with instructions for next chunk
  • Manual Control: Use chunkIndex parameter to get specific chunks
  • Smart Formatting: Chunked responses include summary and navigation hints

Example:

// Get first chunk (automatic)
customer_list()

// Get specific chunk
customer_list({ chunkIndex: 1 })

// Smaller page size with chunking
customer_list({ maxRecords: 25, chunkIndex: 0 })

Troubleshooting

Common Issues

  1. "OAuth client not initialized"

    • Ensure your ionApiKey is properly formatted in the config
    • Check that all required fields are present in the ionApiKey
  2. Connection timeouts

    • Verify your Infor ION API URLs are accessible
    • Check firewall/proxy settings
  3. "No tools available" in Claude

    • Restart Claude Desktop/Code after adding the configuration
    • Verify the MCP server started successfully (check logs)
    • Ensure you're using the correct package name: @douglaslinsmeyer/infor-mcp-server
  4. Authentication failures

    • Ensure your service account credentials (saak/sask) are valid
    • Check that the OAuth scopes include "Infor-M3"

Getting Your ION API Key

  1. Log into Infor ION API
  2. Navigate to "Authorized Apps"
  3. Create or select a service account
  4. Download the .ionapi file
  5. Open the file and copy the JSON content to your MCP configuration

Viewing Logs

To see MCP server logs:

  • Claude Desktop: Check the Developer console
  • Claude Code: View Output panel → MCP Server logs

Security Considerations

Safe Mode (New Feature)

The MCP server includes a Safe Mode feature that prevents accidental write operations to your M3 system. When enabled, only read-only operations are allowed, blocking any transactions that could create, update, or delete data.

Enabling Safe Mode

Option 1: Environment Variable

export INFOR_MCP_SAFE_MODE=true

Option 2: Command-line Argument

node dist/index.js --safe-mode

Safe Mode Configuration Options

  • INFOR_MCP_SAFE_MODE: Enable/disable safe mode (true/false)
  • INFOR_MCP_SAFE_MODE_STRICT: Block unknown transactions (true/false)
  • INFOR_MCP_AUDIT_LOG: Log all operations for audit (true/false)
  • INFOR_MCP_SAFE_MODE_WHITELIST: Comma-separated list of allowed transactions

Example with whitelisting:

export INFOR_MCP_SAFE_MODE=true
export INFOR_MCP_SAFE_MODE_WHITELIST="CRS610MI/GetBasicData,MMS200MI/Get"

How Safe Mode Works

Safe mode automatically classifies M3 API transactions as:

  • Write Operations: Add, Create, Update, Delete, Send, Print, etc.
  • Read Operations: Get, List, Select, Search, etc.
  • Unknown Operations: Transactions that don't match known patterns

When safe mode is enabled:

  • ✅ Read operations are always allowed
  • ❌ Write operations are blocked with helpful error messages
  • ⚠️ Unknown operations are allowed (or blocked in strict mode)

Example Safe Mode Error

{
  "error": "Safe Mode: Operation Blocked",
  "program": "CRS610MI",
  "transaction": "Add",
  "message": "Safe mode is enabled. The operation 'Add' is blocked because it is a write operation.",
  "suggestions": [
    "Disable safe mode by setting INFOR_MCP_SAFE_MODE=false",
    "Whitelist this transaction: INFOR_MCP_SAFE_MODE_WHITELIST=CRS610MI/Add"
  ]
}

General Security Best Practices

  • Store your ION API credentials securely
  • Never commit .ionapi files to version control
  • Consider using environment variables for sensitive data in production
  • The MCP server only has access to what the service account can access in M3
  • Use Safe Mode when performing read-only analysis or reporting

Performance Optimization

The server includes several optimizations for handling large M3 datasets:

Caching Strategy

  • API Cache: 15-minute TTL for raw API responses
  • Aggregation Cache: 5-minute TTL for computed aggregations
  • LRU Eviction: Automatic cleanup when cache size exceeds limits
  • Cache Invalidation: Pattern-based cache clearing for related data

Data Handling

  • Aggregation-First: Summary data returned by default for large datasets
  • Smart Pagination: Cursor-based for real-time data, offset-based for static
  • Response Chunking: Automatic splitting of responses >15,000 tokens
  • Parallel Processing: Concurrent API calls where possible

Best Practices

  1. Set session context once to avoid repetitive parameters
  2. Use aggregation tools before requesting detailed data
  3. Enable caching for frequently accessed data
  4. Use appropriate maxRecords limits for your use case
  5. Monitor response sizes with metadata flags

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Write tests for new functionality
  4. Ensure all tests pass (npm test)
  5. Submit a pull request

Documentation

Support

  • GitHub Issues: https://github.com/douglaslinsmeyer/infor-ion-mcp/issues
  • Documentation: This README and docs/ folder
  • Infor ION API Docs: Available in your Infor portal

License

MIT