Skip to main content
Glama
ajemssolutions

AJEMS MCP Connector

Official

AJEMS MCP Connector

Позволяет Claude и ChatGPT отвечать на вопросы о рабочем пространстве AJEMS — и при желании создавать приложения, формы и записи — без входа в AJEMS.

Одно развёртывание обслуживает всех тенантов. Пользователи входят, указывая название своей организации и секретный ключ AJEMS.


Файлы

Файл

Роль

server.js

Конфигурация, аутентификация, HTTP-транспорт, проверка здоровья, завершение работы

tools.js

Каждый инструмент, который может вызвать ИИ

ajems.js

Единственный модуль, который общается с AJEMS API

oauth.js

OAuth-рукопожатие, необходимое для Claude и ChatGPT

cache.js

Кэширование для каждого тенанта и ограничение параллелизма восходящих запросов

util.js

Небольшие общие помощники

diagnose.js

Пошаговая проверка из 11 шагов

mock-ajems.js

Фейковый AJEMS с примерами данных для тестирования без живого рабочего пространства


Related MCP server: Synapse

Быстрый старт

npm install
cp .env.example .env      # set PUBLIC_URL and AJEMS_HOST_TEMPLATE
npm start

Проверьте на реальном рабочем пространстве:

node diagnose.js https://mcp.ajems.com <organisation> <secret-key>

Или попробуйте вообще без AJEMS:

npm run mock              # terminal 1
# set AJEMS_HOST_TEMPLATE=http://localhost:9090/{org}/json_builder
npm start                 # terminal 2
node diagnose.js http://localhost:8080 testco test-secret-key

Смотрите DEPLOY.md для nginx, TLS, pm2 и настройки.


Инструменты

По умолчанию только чтение. Установите ALLOW_WRITES=true для четырёх инструментов записи.

Инструмент

Назначение

list_apps_and_forms

Обнаружение — каждое приложение и форма, с флагами чтения/записи

describe_form

Ключи полей, человеческие метки, типы, параметры выпадающих списков

query_responses

Записи с фильтрами, диапазоном дат, выбором полей

aggregate_responses

count / sum / avg / min / max, опционально с группировкой

create_app

Новое приложение

create_form

Новая форма; ключи полей генерируются автоматически

create_record

Одна или несколько записей, вставка с ограниченным параллелизмом

update_record

Изменение полей существующей записи

search

Поиск по ключевым словам в формах и записях (ChatGPT)

fetch

Полная информация об одном результате поиска (ChatGPT)

aggregate_responses вычисляет на сервере. Без него «итог по городам» пришлось бы тянуть тысячи строк в контекст модели и считать вручную — медленно, дорого и неверно после определённого размера.

search и fetch существуют потому, что вне режима разработчика ChatGPT вызывает только инструменты с этими двумя именами и игнорирует всё остальное.


Как обрабатывается вопрос

Claude спрашивает «сколько записей за июль по городам?»:

  1. list_apps_and_forms → находит форму

  2. describe_form → узнаёт, что date_1750943312417 — это поле даты, а dropdown_1750943301432 содержит города

  3. aggregate_responses с диапазоном дат и group_by → получает три числа

  4. Пишет ответ на простом английском

Ключи полей генерируются автоматически (date_1750943312417), поэтому шаг 2 не является необязательным. Описания инструментов сообщают это модели, и она сама выстраивает цепочку вызовов.


Изоляция тенантов

  • Тенант берётся из сессии и определяется на сервере по bearer-токену

  • Ни одна схема инструмента не имеет параметра tenant, org или url — не существует ничего, что модель можно было бы уговорить изменить

  • ajems.js — единственный модуль, отправляющий исходящие запросы, и только на базовый URL этого тенанта

  • Ключи кэша разделены по тенанту и хешу секретного ключа, поэтому тенанты не могут читать чужие кэшированные записи, а ротированный ключ сам истекает

  • Названия организаций урезаются до символов, безопасных для поддоменов, поэтому запись вида evil.com/x не может перенаправить сервер куда-либо ещё

  • Каждый вызов инструмента логируется как JSON с тенантом и пользователем

При добавлении инструмента перепроверьте второй пункт.


Тестирование

46 проверок проходят против мока: аутентификация, все 10 инструментов, фильтры, диапазоны дат, запасной вариант created_at, группированная агрегация, массовая вставка, инвалидация кэша после записи, сообщения об ошибках, изоляция тенантов, 20 одновременных пользователей и ограничение скорости.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Jurisly workspaces for tasks like drafting invoices, finding hearing dates, and editing documents through natural language.
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables LLM clients to securely read and write Frappe/ERPNext data under a real user's permissions, with audited calls and granular access control.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to connect to a Flow Master workspace and perform project, task, ticket, board, relationship, tag, and comment operations under the user's own account and permissions.
    3 npm
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to securely connect to a vybeflow tenant for multi-channel messaging operations such as reading inbox tickets, looking up contacts, checking campaign progress, and sending messages under scoped permissions.
    MIT