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: BackCrew ServiceM8 MCP Server

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

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 одновременных пользователей и ограничение скорости.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

0Maintainers
No issuesResponse time
0Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables an AI assistant to interact with ServiceM8 via natural language, supporting lookups and optionally creating or updating records, with tiered safety controls.
    36
    MIT
  • A
    license
    Not graded
    quality
    C
    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
    C
    maintenance
    Enables AI agents to directly interact with ERPNext/Frappe business data and operations, including document management, submissions, cancellations, reports, PDF generation, file uploads, and whitelisted method calls, with per-request permission enforcement.
    MIT

View all related MCP servers

Latest Blog Posts

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/ajemssolutions/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server