MCP4Acumatica
MCP4Acumatica
면책 조항: 이 프로젝트는 독립적인 커뮤니티 기반 통합 프로젝트이며, Acumatica, Inc.와 제휴, 보증 또는 지원되지 않습니다. "Acumatica"는 Acumatica, Inc.의 등록 상표입니다. Acumatica 명칭과 API의 사용은 상호 운용성을 위한 목적으로만 사용됩니다.
Claude를 Acumatica ERP 2025 R2에 연결하는 원격 Model Context Protocol(MCP) 서버입니다. Cloudflare Workers에서 실행되며, 각 사용자가 자신의 Acumatica 인스턴스에 대해 OAuth 인증을 사용합니다.
각 사용자는 자신의 Acumatica 자격 증명으로 인증합니다. 사용자의 Acumatica 역할이 접근할 수 있는 레코드를 결정합니다. MCP 서버는 추가로 특정 Acumatica 역할을 요구하며, 동의 중간 페이지를 표시하고, 데이터가 AI 모델에 도달하기 전에 민감한 필드를 자동으로 가립니다.
기능
49개의 도구 -- 38개의 읽기 전용 조회 + 6개의 유틸리티/검색 + 4개의 스키마 지식 + 1개의 쓰기 도구(고객 생성/업데이트, 기본적으로 비활성화됨) (자세한 내용은 사용 가능한 도구 참조)
사용자별 OAuth -- 사용자가 자신의 Acumatica 자격 증명(또는 SSO)으로 로그인
역할 기반 접근 -- Acumatica의 보안 모델이 각 사용자가 볼 수 있는 내용을 제어
접근 게이트 -- 지정된 카나리 일반 문의(Generic Inquiry)를 읽을 수 있는 사용자만 연결 가능 (원하는 대로 제한 가능;
MCP Access와 같은 마커 역할이 권장됨)동의 중간 페이지 -- 사용자가 도구에 접근하기 전에 AI 데이터 처리를 승인해야 함
민감한 필드 가리기 -- 주민등록번호, 은행 계좌, 급여 및 기타 개인 식별 정보(PII) 필드는 서버를 떠나기 전에 자동으로 가려짐
속도 제한 -- 기본적으로 사용자당 3개의 동시 요청 및 분당 40개의 요청, 관리 콘솔에서 모두 조정 가능. 모든 슬롯이 사용 중인 요청은 바로 실패하지 않고 잠시 기다리며, 거부는
{ error: "rate_limited", retryAfterSeconds, actionRequired }구조화된 봉투를 반환하여 AI가 재시도 대신 정확히 얼마나 기다려야 하는지 알려줌페이지네이션 거부 -- 목록/쿼리 도구가 레코드 상한에 도달하면
{ truncated, paginationSupported: false, actionRequired }구조화된 봉투를 반환하여 AI가 도구를 다시 호출하는 대신 사용자에게 더 좁은 필터를 요청하도록 지시구조화된 감사 로깅 -- 모든 도구 호출, 인증 이벤트 및 필드 가리기가 기록됨
관리 콘솔 --
/docs/admin의 웹 기반 관리 인터페이스로, 재배포 없이 로그를 보고 런타임 설정을 관리장기 로그 보존 -- Cloudflare Logpush를 통한 R2 기반 로그 저장소, 검색 가능한 로그 뷰어
Related MCP server: MCP4Acumatica
아키텍처
Claude (claude.ai / Desktop / API)
|
v MCP over streamable-http
+----------------------------------+
| Cloudflare Worker |
| OAuth 2.1 Provider |
| /authorize -> Acumatica login |
| /callback <- Acumatica |
| (access gate + OIDC userinfo) |
| /consent -> AI data consent |
| /token, /register (DCR) |
| /mcp -> McpAgent DO (49 tools)|
+---------------+------------------+
| Bearer token (per-user)
v
Acumatica 25R2 SaaS
Contract-Based REST API
Default/25.200.001사전 요구 사항
Node.js >= 18
Cloudflare 계정 (Durable Objects를 위한 Workers 유료 요금제)
Acumatica 2025 R2 인스턴스:
SM303010에서 인가 코드(Authorization Code) OAuth 2.0 흐름으로 구성된 연결된 애플리케이션(Connected Application) (범위는 앱에 구성되지 않고 요청 시 서버에서 전송됨)
Workers의
/callback엔드포인트를 가리키는 리디렉션 URIMCPAccess일반 문의(Generic Inquiry) (SM208000) -- **OData를 통해 노출(Expose via OData)**이 활성화된 간단한 카나리 GI; 로그인 접근 게이트는 사용자가 이를 읽을 수 있는지 확인합니다 (자세한 내용은 아키텍처 문서 참조). GI 이름은ACUMATICA_CANARY_GI를 통해 구성 가능.해당 GI를 읽을 수 있는 사용자를 제한하는 방법 -- 권장 방식은 허용된 사용자에게만 할당된 마커
MCP Access역할(SM201005)입니다.
설정
세 가지 설치 경로가 있습니다. 세 경로 모두 동일한 Acumatica 측 사전 요구 사항에 의존합니다 — 어떤 경로를 선택하든 먼저 해당 작업을 완료하십시오 (아래 "Acumatica 측 구성" 참조).
경로 | 가장 적합한 대상 | 터미널 필요? |
A. Cloudflare에 배포 버튼 | 완전한 GUI 설치를 원하는 사용자 | 아니요 |
B. 한 줄 설치 프로그램 | 이미 | 예 (한 명령) |
C. 수동 설정 | 각 단계를 검토하려는 모든 사용자 | 예 |
경로 A — Cloudflare에 배포 버튼 (터미널 불필요)
버튼을 클릭하면 이 저장소를 GitHub 계정으로 포크하고, wrangler.jsonc를 읽고, KV 네임스페이스와 R2 버킷을 자동 생성하고, 비밀을 묻고, 배포합니다. 단계별:
버튼을 클릭하세요. Cloudflare에서 로그인(또는 계정 생성) 및 GitHub 포크 권한 부여를 요청합니다.
바인딩 확인. KV 네임스페이스를 두 번 생성하라는 메시지가 표시됩니다 — 한 번은
TOKEN_STORE바인딩(앱 데이터: 토큰, OAuth 상태, 캐시, 구성, 관리자 세션)용, 다른 한 번은OAUTH_KV(OAuth 라이브러리에서 내부적으로 사용)용입니다. 이는 정상입니다: 두 개의 별도 바인딩이며 키를 공유하지 않습니다.⚠️ 두 네임스페이스에 다른 이름을 지정하세요 (예:
TOKEN_STORE용mcp4acumatica-app,OAUTH_KV용mcp4acumatica-oauth). Cloudflare의 자동 프로비저닝은 Worker 이름에서 기본 제목을 파생하므로 두 필드 모두 기본적으로mcp4acumatica로 설정됩니다 — 동일한 제목으로 두 개의 네임스페이스를 생성하면 "Cannot provision a KV Namespace with the title … because it already exists." 오류가 발생합니다. 이미 이 오류가 발생했다면, 미완성된 네임스페이스가 남아 있는 것입니다: Storage & Databases → KV로 이동하여 고아가 된mcp4acumatica네임스페이스를 삭제한 다음, 두 개의 구별되는 이릠름으로 재시도하십시호. (Cloudflare의 GUI 자동 프로비저닝은 두 바인딩을 하나의 네임스페이스에 지정할 수 없으며, 구성에서 사전에 구별된 이름을 설정할 수 없습니다 — 따라서 구별된 이름을 가진 두 개의 별도 네임스페이스가 방법입니다. GUI가 계속 실패하면 아래 터미널 설치 경로를 사용하십시오:setup.sh는 하나의 네임스페이스를 생성하고 두 바인딩을 모두 여기에 연결합니다.)R2 버킷(
mcp4acumatica-logs,mcp4acumatica-index)도 같은 방식으로 생성되지만,wrangler.jsonc에 이름이 고정되어 있으므로 충돌하지 않습니다.비밀 설정. 메시지가 표시면 다음을 붙여넣으세요:
ACUMATICA_CLIENT_ID— 연결된 애플리케이션(SM303010)에서ACUMATICA_CLIENT_SECRET— 동일한 화면에서COOKIE_ENCRYPTION_KEY— 브라우저 콘솔을 열고 다음을 실행:[...crypto.getRandomValues(new Uint8Array(32))].map(b => b.toString(16).padStart(2,'0')).join('')결과로 나온 64자리 16진수 문자열을 복사합니다.
ADMIN_SECRET— 기억할 수 있는 비밀번호 (/docs/admin콘솔 보호). 선호하는 것이 없으면[...crypto.getRandomValues(new Uint8Array(24))].map(b => b.toString(16).padStart(2,'0')).join('')를 실행하여 생성하세요.
배포. Cloudflare가 포크를 Workers Builds에 연결하고 첫 번째 배포를 푸시합니다.
Acumatica 변수 업데이트. 배포가 완료되면 Cloudflare 대시보드에서
Workers & Pages → mcp4acumatica → Settings → Variables and Secrets를 열고 다음을 편집합니다:ACUMATICA_URL(예:https://yourcompany.acumatica.com)ACUMATICA_TENANT(로그인 회사)선택적으로
ACUMATICA_MAX_RECORDS,ACUMATICA_CANARY_GI,REDACT_PATTERNS,REDACT_SKIPSave and Deploy를 클릭하면 Cloudflare가 새 값으로 재배포합니다.
연결된 애플리케이션에 리디렉션 URI 추가. 이제 Workers가
https://mcp4acumatica.<your-account>.workers.dev에서 접근 가능합니다. Acumatica의 SM303010 화면에서 리디렉션 URI에https://<that-host>/callback을 추가하세요. (대신 사용자 정의 도메인을 사용하려면 아래 "사용자 정의 도메인" 참조)배포 테스트.
https://<your-host>/docs/admin/preflight를 방문하여ADMIN_SECRET으로 로그인하고 사전 점검 진단을 실행합니다. Acumatica 연결, OIDC 검색 엔드포인트, 연결된 앱 자격 증명, 테넌트 경로, 계약 API 버전을 확인합니다 — 잘못된 구성이 있으면 이름으로 알려줍니다.
이후 Claude가 연결할 수 있습니다 (아래 "Claude 연결" 참조).
경로 B — 한 줄 설치 프로그램 (터미널)
이미 git, node, npm이 있다면 다음을 실행하세요:
curl -fsSL https://mcp4acumatica.hallboys.com/install.sh | bash저장소를 클론하고, 종족성 설치, ./setup.sh 실행. 설정 스크립트는 제공해야 할 Acumatica 값(URL, 테넌트, 연결된 앱 클라이언트 ID 및 시크릿)을 묻고, 암호화 비밀을 자동 생성하고, KV 네임스페이스와 R2 버킷을 생성하고, 시크릿을 업로드하고, 배포하고, 사전 점검을 실시합니다.
스크립트를 먼저 검토하려면:
curl -fsSL https://mcp4acumatica.hallboys.com/install.sh -o install.sh
less install.sh # read it
bash install.sh # then run경로 C — 수동 설정 (터미널)
1. 클론 및 설치
git clone https://github.com/hallboys/MCP4Acumatica.git
cd MCP4Acumatica
npm install2. KV 네임스페이스 생성
npx wrangler kv namespace create TOKEN_STORE출력에서 네임스페이스 ID를 기록한 다음 wrangler.jsonc에 붙여넣습니다. 동일한 ID가 TOKEN_STORE 및 OAUTH_KV 바인딩 모두에 사용됩니다.
3. Wrangler 구성
wrangler.jsonc는 배포 템플릿으로 저장소에 추적됩니다. 내부에서 편집하고 다음을 입력합니다:
2단계의 KV 네임스페이스 ID (
TOKEN_STORE및OAUTH_KV바인딩 모두 — 동일한 ID)ACUMATICA_URL— Acumatica 인스턴스 URL (예:https://yourcompany.acumatica.com)ACUMATICA_TENANT— Acumatica 회사/테넌트 이름
로컬 값을 git status에서 제외하려면(여전히 충돌 없이 업데이트를 가져올 수 있음):
git update-index --skip-worktree wrangler.jsonc4. 시크릿 설정
npx wrangler secret put ACUMATICA_CLIENT_ID
npx wrangler secret put ACUMATICA_CLIENT_SECRET
npx wrangler secret put COOKIE_ENCRYPTION_KEY # use `openssl rand -hex 32`
npx wrangler secret put ADMIN_SECRET # any password — protects /docs/admin5. 배포
npx wrangler deploy6. 로컬 개발 (선택 사항)
cp .dev.vars.example .dev.vars
# Edit .dev.vars with your Acumatica credentials
npx wrangler devAcumatica 측 구성
이러한 단계는 선택한 설치 경로에 관계없이 필요합니다. 자동화할 수 없습니다 — Acumatica의 API가 이를 노출하지 않습니다.
연결된 애플리케이션 (SM303010)
Acumatica에서: 시스템 > 통합 > 연결된 애플리케이션 (SM303010).
새 연결된 애플리케이션을 생성합니다.
OAuth 2.0 흐름을 인증 코드로 설설정합니다.
리디렉션 URI 추추가:
https://<your-worker-url>/callback(*.workers.dev호스트 이름 또는 사자 정의 도메인 사용).클라이언트 ID와 클라이언트 시크릿을 기록합니다 — 배포 중에 시크릿으로 제공됩니다.
여기서 구성할 범위 필드는 없습니다. OAuth 범위 (
api openid profile email offline_access, Acumatica가 리프레시 토큰을 발급하게 하는offline_access포함)는 권한 부여 요청에서 MCP 서버가 전송합니다 — 연결된 애플리케이션에서 설정되지 않습니다.
접근 게이트: 카나리 일반 문의 (SM208000, SM201005)
사용자가 AI 도구에 접근하기 전에 로그인 흐름은 접근 게이트를 실시합니다: OData를 통해 간단한 카나리 일반 문의를 리하고 사용자의 토큰이 그것을 읽을 수 있느지 확인합니다 (200 → 허용, 403 → 거부). 서버는 Acumatica 역할 맴버쉽을 검사하지 않습니다 — 단지 "이 GI를 볼 수 있습니까?"만 묻습니다. 보안 모델 선호에 따라 카나리 GI를 읽을 수 있는 사용자를 제한합니다; 마커 역할이 권장되는 가장 깔끔한 방법입니다.
카나리 GI 생성: 시스템 > 사용자 정의 > 일반 문의 (SM208000) →
MCPAccess라는 이릠름의 GI를 생성하고 임의의 간단한 리 (하나의 컬럼으으로 충분). OData를 통해 노출 활성화.읽을 수 있는 사용자 제한 (권장: 마커 역할): 시스템 > 접근 권한 > 사용자 역할 (SM201005) →
MCP Access라는 역활을 생성하고 화면 권한 없음,MCPAccessGI만 해당 역활에 할당한 다으, AI 도우미 접근 권한이 있는 각 사용자에게 역활을 할당합니다. GI에 대한 OData 읽기 접근을 제어하는 다른 메커니즘도 작동합니다.
카나리 GI 이름은
ACUMATICA_CANARY_GI변수를 통해 구성 가능합니다 (기본값MCPAccess). Cloudflare 대시보드 (Variables and Secrets) 또는wranggler.jsonc에서 편집합니다.
AI에 일반 문의 노출 (강력히 권장)
성숙한 Acumatica 인스턴스는 수백 개의 Generic Inquiry를 보유할 수 있으며, 대부분은 사람이 사용하는 화면(넓은 보고서 그리드, 대시보드, 임시 쿼리)을 위해 제작되었습니다. 이 모든 것을 어시스턴트에 노출하면 컨텍스트가 넘쳐나고 잘못된 인쿼리를 선택하게 되며, 더 나쁜 것은 OData를 통해 노출된 매개변수화된 GI가 조용히 잘못된 데이터를 반환한다는 점입니다. 매개변수 없이 쿼리되면 Acumatica는 오류 없이 기본/필터링되지 않은 행을 반환하며, 모델이 이를 감지할 수 없습니다. GI 노출 게이트는 이를 옵트인 방식으로 전환합니다. AI 에이전트가 쿼리하기에 실제로 유용하고 정확한 GI에 태그를 지정하면(ExposedToMCP) 모델은 해당 GI만 볼 수 있습니다.
이 게이트는 설정할 때까지 비활성화되어 있습니다. 서버는 실행되지만 레지스트리가 없으면 어시스턴트가 GI를 발견할 수 없습니다(acumatica_list_generic_inquiries가 아무것도 반환하지 않음. 사용자는 정확한 이름으로 GI를 실행할 수 있음). 설정을 하면 어시스턴트가 안전하게 발견할 수 있는 선별된 세트가 제공됩니다. 활성화는 일회성 Acumatica 커스터마이제이션 프로젝트입니다. acumatica/에 번들로 포함되어 있으며, 사용자 정의 필드 UsrExposedToMCP/UsrAIDescription(GIDesign) 및 UsrResAIDescription(GIResult)과 SM208000 양식 변경 사항을 추가하고, 그 다음 MCPGIs/MCPGIFields 피드 GI, MCP Access 역할에 대한 피드 읽기 권한, 그리고 노출하려는 GI 태깅이 필요합니다. docs/generic-inquiries.md를 참조하세요.
전체 근거, 노출할 GI 결정 방법, 단계별 설정은 Generic Inquiries 를 참조하세요.
사용자 정의 도메인 (선택 사항)
배포 시 기본적으로 *.workers.dev 호스트 이름이 제공됩니다. 브랜드 호스트 이름을 연결하려면:
Cloudflare 대시보드를 통해:
Workers & Pages → mcp4acumatica → Settings → Domains & Routes → Add를 선택하세요. 도메인의 영역이 Cloudflare 계정에 있어야 합니다.wrangler.jsonc를 통해: 파일 상단의routes블록 주석을 해제하고pattern과zone_name을 편집한 후 재배포하세요.
호스트 이름을 변경하는 경우 SM303010에서 연결된 애플리케이션의 리디렉션 URI에 새 https://<host>/callback을 추가하는 것을 잊지 마세요.
Claude 연결하기
Claude.ai / Claude Desktop
Settings > Connectors로 이동
Add Connector를 클릭하고 URL 입력:
https://<your-worker-url>/mcp처음 사용 시 Acumatica 로그인 페이지로 리디렉션됩니다.
계정이 카나리 GI를 읽을 수 있는 경우(즉, 액세스 권한이 부여된 경우) AI 데이터 처리를 설명하는 동의 페이지가 표시됩니다.
동의를 확인하면 Claude가 49개 도구 모두에 액세스할 수 있습니다.
Claude Code (CLI)
claude mcp add acumatica-erp --transport streamable-http https://<your-worker-url>/mcpAPI (Anthropic SDK 사용)
Anthropic API를 MCP와 함께 사용할 때 MCP 클라이언트를 https://<your-worker-url>/mcp로 지정하세요. 서버는 /register에서 동적 클라이언트 등록을 통한 OAuth 2.1을 지원합니다.
사용 가능한 도구
핵심
도구 | 설명 |
| 연락처, 신용 규칙, 잔액이 포함된 고객 레코드 |
| 연락처, 조건, 세금 정보가 포함된 공급업체 레코드 |
| 라인 항목, 합계, 배송 정보가 포함된 판매 주문 |
재무 / 회계
도구 | 설명 |
| 라인 항목 및 세금 세부 정보가 포함된 AR 송장 |
| 라인 항목 및 PO 연결이 포함된 AP 청구서 |
| 차변/대변 세부 정보가 포함된 GL 분개 배치 |
| 적용된 문서 및 주문이 포함된 AR 결제 |
| GL 계정과목표 조회 |
| 이력이 포함된 AP 수표/공급업체 결제 |
재고 및 창고
도구 | 설명 |
| 가격, 창고 수량, 공급업체 정보가 포함된 재고 품목 |
| 비재고 품목 (서비스, 인건비, 비용) |
| 창고 간 실시간 가용 수량 |
| 창고별 집계 재고 잔액 |
| 위치 및 설정이 포함된 창고 |
| 품목 분류 기본값 |
구매
도구 | 설명 |
| 라인 항목, 공급업체, 합계가 포함된 PO |
| 수령 수량 및 PO 연결이 포함된 입고 |
프로젝트
도구 | 설명 |
| 프로젝트 헤더, 상태, 재무 정보 |
| 프로젝트 내 작업 |
| 실제 대비 예산 라인 |
| 프로젝트 비용/수익 거래 세부 정보 |
서비스 및 현장
도구 | 설명 |
| SLA, 우선순위, 시간 추적이 포함된 지원 케이스 |
| 세부 정보 및 약속이 포함된 현장 서비스 주문 |
| 예약/실제 시간, 직원, 비용/이익 |
영업 및 CRM
도구 | 설명 |
| 주소, 전화번호, 소유자가 포함된 CRM 연락처 |
| 통합 잠재 고객/고객/공급업체 레코드 |
| 제품 및 금액이 포함된 영업 파이프라인 딜 |
| 상태 및 출처가 포함된 마케팅 리드 |
| 수수료 설정이 포함된 영업 담당자 |
배송 및 이행
도구 | 설명 |
| 패키지, 추적, 운임이 포함된 선적 |
| SO/선적 연결이 포함된 판매 송장 |
HR 및 급여
도구 | 설명 |
| 연락처 및 재무 설정이 포함된 직원 |
| 라인 항목 및 승인이 포함된 경비 보고서 |
| 프로젝트, 청구 가능/초과 근무 시간 추적 |
CRM 활동
도구 | 설명 |
| 발신인/수신인/본문이 포함된 이메일 활동 |
| 참석자가 포함된 일정 이벤트 |
| 일반 CRM 활동 |
| 관련 활동이 포함된 CRM 작업 |
유틸리티 / 검색
도구 | 설명 |
| 필터링과 함께 구성된 모든 Generic Inquiry(GI) 실행 |
| OData 필터링, 정렬, 필드 선택으로 모든 엔터티 검색 |
| 모든 엔터티의 필드, 유형, 하위 엔터티 검색 |
| OData를 통해 노출된 사용 가능한 GI 목록 표시 |
| GI 실행 전 필드 스키마 추론 |
| 스키마 변경 시 캐시된 메타데이터 지우기 |
팁: 먼저
acumatica_describe_entity를 사용하여 사용 가능한 필드를 찾은 다음acumatica_list_entities로 검색/필터링하세요. Generic Inquiry의 경우acumatica_list_generic_inquiries로 GI 이름을 찾고acumatica_describe_inquiry로 사용 가능한 필드를 확인하세요. 사용 패턴은 docs/example-prompts.md를 참조하세요.
문서
자세한 문서는 docs/ 폴더에서 확인할 수 있습니다:
도구 참조 -- 매개변수와 엔드포인트를 포함한 49개 도구의 전체 사양
예제 프롬트 -- 사용 사례별로 구성된 Claude 및 기타 MCP 클라이언트용 예제 프롬프트
OData 필터링 가이드 --
$filter,$orderby,$select,$expand,$top쿼리 매개변수 가이드Generic Inquiries -- GI가 AI 사용에 게이트가 필요한 이유, 노출할 GI, 옵트인 레지스트리 활성화 방법
스키마 지식 -- 통합/커스터마이제이션 구축을 위한 오프라인 스키마 발견 도구, 스키마 인덱스 구축 방법
아키텍처 -- 상세 아키텍처, OAuth 흐름, 보안 모델, 설계 결정 사항
셀프 호스팅 가이드 -- Cloudflare 외부에서 Node.js 또는 다른 플랫폼에서 MCP 서버 실행 방법
Acumatica 업그레이드 -- 연결된 Acumatica 버전 변경 또는 업그레이드 시 수행할 단계
스킬
이 리포지토리와 함께 제공되는 재사용 가능한 Claude 스킬로, skills/에 있습니다:
acumatica-gi-descriptions -- Generic Inquiry 및 해당 결과 열에 대한 AI 대상 설명을 작성하는 종단간 프로세스로, 이름에서 추측하는 대신 GI 자체의 디자인 메타데이터(테이블, 조인, WHERE 조건, 열)에 기반합미다. 대량 GI 메타데이터 작업을 조용히 잘못게 만드는 플랫폼 트립와이어, 찾을 가치가 있는 디자인 신호 체크리스트, 트런케이션 감사, 디자인 브리핑, 드래프트 검증을 위한 세 개의 스크립트를 포함합니다.
사용하려면 Claude를 스킬 디렉토리로 지저하거나 자신의 .claude/skills/에 복사하세요.
보안
저장된 자격 증명 없음. MCP 서버는 Acumatica 비밀번호를 저장하지 않습니다. OAuth 2.0 인증 코드 흐름을 사용하며, 사용자는 Acumatica에 직접 인증합니다.
사용자별 토큰. 각 사용자의 Acumatica 액세스 토큰은 플랫폼 키-값 저장소(기본 배포에서는 Cloudflare KV)에 사용자 이름 범위로 저장됩니다. 토큰은 만료 시 자동으로 갱신됩니다. 리프레시 토큰이 만료되면 수동 재연결 없이 연결이 자동으로 재인증됩니다.
액세스 게이트. 지정된 카나리 Generic Inquiry를 읽을 수 있는 사용자만 연결할 수 있습니다. 서버는 로그인 시 OData를 통해 GI 읽기 가능 여부를 확인하며(역할 멤버십이 아님), 액세스 권한이 없는 사용자는 액세스 거부 페이지를 보게 됩니다. GI는 원하는 대로 제한할 수 있으며,
MCP Access역할 마커를 사용하는 것이 권장됩니다. GI 이름은ACUMATICA_CANARY_GI환경 변수로 구성 가능합니다.동의 중간 페이지. 액세스 확인을 통과한 후, 사용자는 MCP 세션이 활성화되기 전에 자신의 데이터가 외부 AI 모델에 의해 처리된다는 점을 인지해야 합니다.
민감 필드 편집. 도구 응답은 자동으로 민감 필드 이름(SSN, 은행 계좌, 급여, 신용카드 등)을 스캔하며, 일치하는 값은
[REDACTED]로 대체됩니다. 패턴은REDACT_PATTERNS및REDACT_SKIP환경 변수로 구성 가능합니다.역할 기반 액세스. 사용자의 Acumatica 역할이 읽을 수 있는 레코드를 결정합니다. 사용자가 Acumatica에서 레코드에 액세스할 수 없는 경우 MCP 서버를 통해서도 액세스할 수 없습니다.
읽기 전용. 현재 모든 도구는 읽기 전용 조회입니다. 데이터가 생성, 수정 또는 삭제되지 않습니다.
속도 제한. 기본적으로 동시 요청 3개, 분당 40개 요청, 쿼리당 1000개 레코드 상한이 있으며, 재배포 없이 관리 콘솔
/docs/admin/settings에서 모두 구성 가능합니다. 제한은 사용자별로 적용되며 Acumatica에 대한 HTTP 호출(도구 호출 아님)을 계산합니다. 거부 시 정확한retryAfterSeconds가 포함된 구조화된 응답을 반환하며,rate_limit_hit이벤트로 기록되어 상한이 너무 엄격한지 확인할 수 있습니다.페이지네이션 거부. 목록/쿼리 도구(
acumatica_list_entities,acumatica_run_inquiry,acumatica_list_generic_inquiries)는 페이지네이션을 지원하지 않습니다. 응답이ACUMATICA_MAX_RECORDS에 도달하면 도구는 구조화된 응답(truncated: true,paginationSupported: false,actionRequired: "...")을 반환하여 AI가 중단하고 더 많은 레코드를 검색하는 대신 사용자에게 더 좁은 필터를 요청하도록 지시합니다.감사 로깅. 모든 도구 호출, 인증 이벤트(로그인 성공/거부, 동의 수락) 및 필드 편집 이벤트가 구조화된 JSON으로 기록됩니다.
npx wrangler tail로 확인할 수 있습니다.
플랫폼 이식성
기본 배포는 Cloudflare Workers를 대상으로 하지만, 도구 핸들러와 핵심 라이브러리는 플랫폼에 독립적입니다. 저장소 추상화(IKeyValueStore 인터페이스 + AppEnv 타입)는 도구 로직을 Cloudflare 특정 API로부터 분리하여 Redis, SQLite 또는 기타 저장소 백엔드를 사용하는 Node.js에서 자체 호스팅 배포를 가능하게 합니다. 자세한 내용은 자체 호스팅 가이드를 참조하세요.
기술 스택
MCP:
agentsSDK (McpAgent),@modelcontextprotocol/sdkHTTP 라우팅: Hono
언어: TypeScript
검증: Zod
개발
npx wrangler dev # Start local dev server
npx tsc --noEmit # Type check
npx wrangler tail # Stream live logs from deployed worker라이선스
Apache 2.0 -- Copyright 2026 Hall Boys, Inc.
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.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables Claude to interact with Acumatica ERP through a remote MCP server with per-user OAuth, role-based access, and 44 tools for querying and managing ERP data.17Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA remote MCP server that connects Claude to Acumatica ERP 2025 R2 with per-user OAuth, role-based access, and sensitive field redaction.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA remote MCP server that connects Claude to Acumatica ERP with per-user OAuth, role-based access, and sensitive field redaction.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA remote MCP server that connects Claude to Acumatica ERP 2025 R2 with per-user OAuth authentication, role-based access control, and sensitive field redaction.Apache 2.0
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/NologyAcu/mcp4nologyacu'
If you have feedback or need assistance with the MCP directory API, please join our Discord server