infor-rpa-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@infor-rpa-mcpvalidate the project manifest for errors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Infor RPA Dev Skill
A production-grade Claude Code skill for the full Infor RPA Studio 2026.x development lifecycle — understand, debug, edit, and build .xaml workflows and project.json manifests, grounded in a real installed Studio instance and a reflected 182-activity oracle.
Table of Contents
Related MCP server: Claude Rules MCP Server
Overview
infor-rpa-dev consolidates three sources into a single authoritative skill:
Source | Contribution |
| Generation patterns, Build Gate loop |
| Validation linter, reference project |
Live Studio 2026.04.1 install | DLL-reflected activity oracle, manifest boilerplate |
All activity names, namespaces, property types, API endpoints, and XAML patterns are looked up — never guessed. The linter enforces 25+ load traps and is calibrated to zero ERRORs on the bundled reference project.
Requirements
OS: Windows 10/11
Infor RPA Studio: 2026.x installed under
C:\Program Files\Infor\RPAClaude Code: Latest CLI version
Python: 3.8+ on
PATHfastmcp:
==2.14.7(pinned — 3.x is a breaking rewrite)
pip install "fastmcp==2.14.7"Version lock: Do not upgrade
fastmcpbeyond2.x.fastmcp 3.xdropped theFastMCPserver class and is a different product.mcp-atlassianalso requiresfastmcp<2.15.0.
MCP Local Setup
⚠️ This repo ships with one developer's machine baked into it. The registration examples in earlier versions of this README (and the
sourceFiles[].filePathentries insideassets/studio-reference-project/project.json) point atC:\Users\hthotapalli\...— that's the original author's Windows profile, not a placeholder. Anywhere you seehthotapallior<username>below, replace it with your own Windows username (or better, use the full path to wherever you cloned this repo — see step 2). Theproject.jsonsample paths don't need manual fixing: Studio rewritesfilePathitself the next time it saves that project, and the skill only ever reads that file for its namespace/assembly boilerplate, never for a literal path.
1. Clone this repo somewhere stable. Any folder works — the server resolves its own asset paths
relative to mcp-server/server.py (SKILL_DIR = Path(__file__).resolve().parent.parent), so nothing is
hardcoded to .kiro\skills\infor-rpa-dev. That's just the conventional install location Kiro's skill
loader expects; a plain clone anywhere is fine as long as the args path below matches it.
git clone <this-repo-url> C:\Users\<your-username>\.kiro\skills\infor-rpa-dev2. Install the pinned MCP dependency (system Python is fine — no venv required):
pip install "fastmcp==2.14.7"3. Register the server in ~/.kiro/settings/mcp.json (create the file if it doesn't exist yet).
Point command at your Python interpreter and args at the absolute path to server.py inside
your clone from step 1:
{
"infor-rpa-mcp": {
"command": "C:\\Users\\<your-username>\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"args": ["C:\\Users\\<your-username>\\.kiro\\skills\\infor-rpa-dev\\mcp-server\\server.py"]
}
}command can also just be "python" if it's already on PATH — use the full python.exe path only if
you have multiple Python installs and need to pin one.
4. Verify it starts clean. Run the server directly once to catch import/path errors before Kiro does:
python C:\Users\<your-username>\.kiro\skills\infor-rpa-dev\mcp-server\server.pyIt will sit idle waiting for a stdio client (that's expected for an MCP server) — no traceback means the
oracle/asset paths resolved correctly. Ctrl+C to exit, then restart Kiro / Claude Code so it picks up
the new mcp.json entry.
5. Smoke-test from a chat session. Once registered, ask the assistant something that forces a tool call, e.g. "use infor-rpa-mcp to search_activities for 'send email'" — a JSON result back means the tools, the oracle, and the API-spec index are all wired correctly.
Troubleshooting:
ModuleNotFoundError: fastmcp→ thepip installabove targeted a different Python thancommandpoints to; check withpython -m pip show fastmcp.Server registers but every tool call errors →
argspath doesn't match where you actually cloned the repo, or has a typo in the username segment.fastmcpimport works but behaves unexpectedly → you're onfastmcp>=3.0; reinstall the pinned2.14.7(see Requirements above).This server is fully local and offline — it only ever reads files under this repo's
assets/andreferences/. It's a different, separate thing from the optional Atlassian MCP (mcp-atlassian) the skill also reaches for live Confluence/Jira grounding (§6 ofSKILL.md) — that one talks to your Atlassian tenant over the network and is registered independently.
Skills & Capabilities
The skill operates in five distinct modes, each with its own scope and safety gate.
Mode 1 — UNDERSTAND / REVIEW (read-only)
Trace an existing RPA project without writing anything:
Map
project.json → "main"entry workflow → all invoked sub-workflowsAudit argument/data flow, integration boundaries, serverless agent contracts
Detect broken
InvokeWorkflowreferences, type mismatches, serverless violationsReport structure, naming, and logging standard gaps
No Build Gate required. No XAML is written.
Mode 2 — DEBUG (read-only analysis)
Diagnose Studio load errors, runtime failures, and behavioral bugs:
Match the symptom (Studio error text, log line, wrong output) to the root cause
Cross-reference
references/known-load-errors.md(18 KB, 25+ categorized load traps)Identify: namespace mismatch,
Nothing/empty expression, wrong VB.NET API, bad property typePropose the minimal fix and validate it via the linter before presenting
No Build Gate required. Analysis only.
Mode 3 — EDIT / EXTEND / CUSTOMIZE (writes XAML)
Modify existing workflows to meet new requirements:
Add/remove activities, adjust logic, refactor, optimize, rename arguments
Preserve the namespace block, naming conventions, and logging standard
Touch the minimum number of files; append to
sourceFileswhen adding workflowsValidate every touched file to zero ERRORs before presenting
Build Gate required — requirements confirmed on paper before XAML is written.
Mode 4 — BUILD / SCAFFOLD (full project generation)
Create a new RPA project from scratch:
Scaffold the project folder:
{Name}_DDMMYYYY_RpaDevunderDesktop\InforRPA_ProjectsClone
project.jsonmanifest from the golden reference (2026.04.1 canonical)Author entry workflow + sub-workflows using the activity oracle and XAML patterns
Every activity property confirmed via MCP before use; every OutArgument defensively initialized
Build Gate required — happy path + every failure path mapped on paper first.
Mode 5 — VERIFY (Generate → Validate → Fix loop)
Mandatory post-generation quality gate:
Run
validate_rpa_project(path)orvalidate_xaml_file(path)via MCPFix every
ERROR-level issue;WARNING/STYLEare advisoryRe-run until the linter exits
0Only files that pass may be presented to the user
All previous modes feed into Verify. No generated workflow ships without a clean linter pass.
Knowledge Base (24 Reference Files, ~250 KB)
Reference File | Contents |
| 45 KB — every activity + exact property signatures |
| 47 KB — 466 ION API endpoints indexed by intent |
| 23 KB — namespace block, assemblies, ViewState, root boilerplate |
| 25 KB — error handling, scoping, defensive init patterns |
| 18 KB — load trap symptom → cause → fix |
| 17 KB — manifest/namespace block, ION API patterns |
| 17 KB — ground truth from real Studio output |
| 24 KB — per-property .NET types across all activities |
| 15 KB — WF4 type system, per-property validation rules |
| 14 KB — LN Invoice Processing domain patterns |
| 14 KB — multi-file layout, dependencies, argumentsMap |
| 11 KB — failproof manifest creation (Method A & B) |
| 11 KB — file/arg/var/DisplayName standards |
| 12 KB — |
| 9.8 KB — VB.NET idioms, LINQ, JSON, OData |
| 6.3 KB — full namespace/prefix/assembly binding surface |
| 8.2 KB — Microsoft Graph email/file auth |
| 11 KB — Review Center lifecycle |
| 7.8 KB — standard log line/section formatting |
| 19 KB — broad activity reference + serverless matrix |
| 6.2 KB — InvokeWorkflow data flow |
| 5.3 KB — live Confluence/Jira sourcing guardrails |
| 2.3 KB — pointers to official Infor 2026 PDFs |
What This Skill Covers
High-level summary only — every claim below is backed by a generated/verified reference file, linked inline, so this README doesn't drift out of sync with the actual oracle.
Activity coverage
The oracle (assets/activity-types.json, reflected off the installed DLLs) currently covers 182
activities across 22 DLLs, spanning every Infor.Activities.* pack plus the standard WF4 control-flow
set (Sequence, If, ForEach, TryCatch, While, DoWhile, Switch, Flowchart, StateMachine, …):
Pack | ~# activities | Serverless-safe? | Covers |
| 48 | ✅ | Logging, file/JSON/string utils, dialogs |
| 34 | ❌ (UI automation) | Browser automation, selectors |
| 23 | ✅ Graph variants only | Read/send/move/download Outlook mail |
| 13 | ❌ (UI automation) | Desktop/UI automation |
| 13 | ❌ (local COM) | Local |
| 13 | ✅ | Excel via Graph/OneDrive |
| 11 | ✅ | OneDrive/SharePoint files |
| 6 | ✅ | SharePoint list CRUD |
| 5 | ✅ |
|
| 4 | ✅ | Cloud storage/object ops |
| 1–few each | mostly ✅ |
|
| — | referenced, not dropped |
|
Full pack → namespace → prefix → serverless-safety matrix: references/assembly-prefix-map.md. Full
per-activity prose + usage patterns: references/activity-catalogue.md (1200+ lines, includes the
standard WF4 activities). Custom/tenant activity packs (e.g. a bespoke Infor.Activities.QueueAPI) are
not catalogued — the skill confirms those from the installed DLL or its source instead of guessing.
Property/type coverage
Every activity property in the oracle carries its exact reflected .NET type, not a guess. The two categories that matter for whether a XAML file loads in Studio at all:
Argument-wrapped properties —
InArgument<T>/OutArgument<T>/InOutArgument<T>— these can be bound to a[variable]expression. Covers everything from primitives (String,Int32,Boolean) toiru:ResponseObject(API responses),njl:JObject/JArray/JToken(JSON),scg:Dictionary/IDictionary(config +InvokeWorkflowarguments),List(Of String)(email recipients), ands:String[](pipe-split values).Plain (non-Argument) properties — a bare
Boolean/String/Int32on the activity itself (e.g.MarkAsRead,ContinueOnError) — these accept a literal only (True,"text",42); binding one to[variable]is a guaranteed Studio load failure, and the linter (below) catches it for every property in the oracle, not just a hand-picked list.
Full per-property type tables and the WF4 type-system rules (array syntax, IDictionary vs Dictionary,
etc.): references/rpa-xaml-type-validation.md. Exact signatures for every reflected class:
references/activity-signatures.md and assets/activity-types.json directly.
How MCP works
The MCP server (mcp-server/server.py) is a FastMCP 2.14.7 stdio server. Kiro (or Claude Code)
launches it as a subprocess per the config in MCP Local Setup; the assistant then
calls its tools mid-conversation instead of trusting its own memory of an activity name or endpoint. Two
things worth being explicit about:
It's 100% local and read-only. Every tool call reads a bundled file under this repo's
assets/orreferences/—activity-types.jsonfor the oracle,api-specs/*.jsonfor endpoints,known-load-errors.mdfor error lookups. No network call happens insideserver.py.It's a different thing from the Atlassian MCP. The skill separately reaches for a live
mcp-atlassian(orclaude_ai_Atlassian) server for tenant-specific Confluence/Jira grounding (references/mcp-knowledge-sourcing.md) — that one does talk to your Atlassian instance over the network and is registered independently ofinfor-rpa-mcp. Don't confuse the two when troubleshooting connectivity.
The full tool list with signatures and example calls is next, in MCP Server Capabilities.
MCP Server Capabilities
The MCP server (mcp-server/server.py) is a FastMCP 2.14.7 instance registered in Kiro as
infor-rpa-mcp. It exposes 11 tools — 3 activity-oracle lookups, 3 validation wrappers, 3 project
utilities, an API-endpoint search, and an error-symptom lookup. All reads are from bundled assets — no
network calls. See MCP Local Setup for how to register it.
Tools
lookup_activity(class_name: str) → dict
Returns exact property signatures for one Infor activity class from the 182-activity DLL-reflected oracle. Accepts fully-qualified or short class name. Falls back across activity-types.json → activity-types-supplemental.json → activity-type-overrides.json. Returns a xamlPattern field with a minimal valid XAML skeleton.
lookup_activity("IONAPIRequestWizard")
# → { "class": "Infor.Activities.IONAPI.IONAPIRequestWizard",
# "properties": { "ServiceName": "InArgument<String>", ... },
# "xamlPattern": "<ionapi:IONAPIRequestWizard ...>" }lookup_activities(class_names: list[str]) → list[dict]
Batch variant of lookup_activity. Resolves multiple activity classes in one call.
search_activities(query: str, limit: int = 20) → list[dict]
Keyword search across the full 182-activity registry. Returns matching activities with class name and property signatures.
search_activities("send email outlook", limit=5)validate_xaml_file(file_path: str) → dict
Validates a single .xaml workflow or project.json against all 25+ linter rules. Returns:
{
"passed": true,
"errors": [],
"warnings": ["..."],
"style": ["..."]
}validate_rpa_project(project_path: str) → dict
Validates every .xaml file and project.json in a project directory. Returns per-file results and an aggregate passed boolean.
validate_xaml_batch(file_paths: list[str]) → list[dict]
Validates an explicit list of .xaml / project.json files in one MCP call.
search_api_endpoint(query: str, limit: int = 10) → list[dict]
Searches 466 Infor ION API endpoints across 25 bundled OpenAPI specs. Returns matching endpoints with service, HTTP method, path, and summary.
search_api_endpoint("purchase order approve", limit=5)
# → [{ "service": "LN", "method": "POST", "path": "/PurchaseOrders/{id}/approve", ... }]Covered Services (25 OpenAPI specs):
AIDataModeling · ColemanAIPlatform · DataLake · IDM_Api · InfoRpa · ION_Pulse · LN_OData · RPAReviewCenter · SessionService · and 16 more.
lookup_error(error_text: str) → dict
Searches the known-load-errors catalogue for matching symptoms and returns up to 3 sections with cause and fix.
lookup_error("The type 'Infor.Activities.Sys.Activities.LogExecutionMessage' was not found")get_studio_version() → dict
Detects the installed Infor RPA Studio version by reading the newest project.json under %LOCALAPPDATA%\InforRPA. Used only to clone the studioVersion value into new manifests.
create_project_folder(project_name: str, base_path: str = "") → dict
Creates a new RPA project folder following the standard naming convention:
{project_name}_DDMMYYYY_RpaDev
# e.g. ION_PO_Fetch_30062026_RpaDevDefaults to Desktop\InforRPA_Projects when base_path is not provided.
read_rpa_project(project_path: str) → dict
Reads and parses project.json from a project directory. Extracts studioVersion, dependencies, packages, and sourceFiles for manifest cloning.
Project Structure
infor-rpa-dev/
├── SKILL.md # 33 KB — skill definition, guardrails, reference map
├── mcp-server/
│ └── server.py # 13 KB — FastMCP server (11 tools + 5 resources)
├── assets/
│ ├── activity-types.json # 163 KB — 182 activities, DLL-reflected oracle
│ ├── activity-types-supplemental.json
│ ├── activity-type-overrides.json
│ ├── api-specs/ # 25 OpenAPI specs (~466 ION API endpoints)
│ ├── studio-reference-project/ # Real loadable Studio 2026.04.1 project (11 .xaml + manifest)
│ ├── studio-templates/ # Empty workflow shells (Sequence, Flowchart, StateMachine)
│ └── lnip/ # LN Invoice Processing domain patterns
├── references/ # 24 markdown files, ~250 KB
│ └── ...
├── scripts/
│ ├── validate_rpa.py # 30 KB — heuristic linter (25+ load trap rules)
│ ├── extract_signatures.py # Regenerate activity-signatures.md from reference project
│ ├── extract_dll_types.ps1 # Refresh oracle from installed DLLs (post Studio upgrade)
│ ├── extract_api_index.py # Regenerate ionapi-endpoint-guide.md
│ └── test_linter_coverage.py # Verify linter correctness
└── .claude/
└── settings.local.json # Claude Code permission configGetting Started
1. Register the MCP Server
Follow MCP Local Setup above — clone the repo, pip install "fastmcp==2.14.7", and
add an infor-rpa-mcp entry to ~/.kiro/settings/mcp.json pointing at your clone (not
hthotapalli's).
2. Open a Project in Claude Code
> Understand this RPA project: C:\InforRPA_Projects\MyBot_30062026_RpaDev3. Build a New Bot
> Build an RPA bot that fetches open POs from ION API and logs them to IDMThe skill will:
Call
create_project_folderto scaffold the folderRun the Build Gate — map every workflow on paper before writing XAML
Look up every activity via
lookup_activitybefore using itSearch
search_api_endpointfor the right ION API pathsAuthor XAML grounded in the oracle and golden skeletons
Call
validate_rpa_projectand fix all ERRORs before presenting
Validation Engine
scripts/validate_rpa.py is a 30 KB heuristic linter calibrated to zero ERRORs on the bundled reference project. It enforces:
Category | Rules |
Root structure |
|
Namespace integrity | All used prefixes declared; no hallucinated assemblies ( |
IdRef / ViewState | No duplicate IdRefs; no orphaned ViewStateData entries |
VisualBasicSettings | Rejects the fatal |
ActivityAction wrappers | DelegateInArgument must be inside |
Bare List properties | Uninitialized List properties flagged via type metadata |
LogExecutionMessage | Rejects |
InvokeWorkflow | Rejects nested |
Type traps | Paren array syntax |
Assign activity | Rejects empty |
project.json | Schema, core keys, |
Exit codes: 0 = clean (no ERRORs); 1 = ERRORs present. WARNINGs and STYLE findings never fail the build.
Guardrails
No hallucination: Every activity class, namespace, property, and endpoint is looked up via MCP or a reference file — never generated from memory.
Build Gate mandatory: No XAML or
project.jsonis written before requirements are confirmed on paper (happy path + every failure path).Zero ERRORs required: Generated workflows are never presented until
validate_rpa_projectexits0.Platform isolation: Strictly Infor RPA Studio 2026.x only — no UiPath, Power Automate, Blue Prism, or Automation Anywhere patterns.
Defensive init: All
OutArgumentvariables are initialized to safe defaults before the firstTryCatch.Minimal footprint: Edit/Extend mode touches the minimum number of files; never rewrites unrelated workflows.
Contributing
Refresh the activity oracle after a Studio upgrade:
.\scripts\extract_dll_types.ps1Verify the linter still passes on the reference project:
python scripts/test_linter_coverage.py python scripts/validate_rpa.py assets/studio-reference-projectAdd new API specs to
assets/api-specs/and regenerate the endpoint guide:python scripts/extract_api_index.py
Author
Harshavardhan Reddy Thotapalli
harshavardhanreddy.thotapalli@infor.com
Infor — RPA Platform Engineering
Grounded in Infor RPA Studio 2026.04.1 · Validated against production serverless agents · fastmcp 2.14.7
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/raghavenderhariharan/RPA_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server