Local Utilities MCP Server
Местный сервер коммунальных услуг MCP
Сервер Model Context Protocol (MCP), который обеспечивает доступ к различным локальным системным утилитам. Этот сервер может использоваться с Cursor и другими MCP-совместимыми клиентами для предоставления быстрого доступа к системной информации.
Функции
Сервер предоставляет следующие утилиты:
Время и дата : получите текущее местное время и дату, включая день недели, в различных форматах.
Имя хоста : Получить имя хоста системы.
Публичный IP : получите публичный IP-адрес устройства.
Список каталогов : список содержимого указанного каталога.
Версия Node.js : получите текущую версию Node.js.
Проверка портов : проверка того, какой процесс запущен на определенном порту.
Инструмент для размышлений : записывайте, извлекайте и анализируйте мысли во время сеансов разработки
Related MCP server: Simple MCP Server
Установка
Глобальная установка
pnpm add -g localutils-mcp-serverИспользование с npx
Вы также можете запустить сервер напрямую с помощью npx, не устанавливая его глобально:
npx localutils-mcp-serverИспользование
Запуск сервера
При глобальной установке:
localutils-mcpС npx:
npx localutils-mcp-serverИспользование с курсором
Сервер можно использовать с Cursor, настроив его как сервер MCP в настройках Cursor.
Открыть настройки курсора
Перейдите в раздел MCP
Добавьте новый сервер MCP со следующей конфигурацией:
{ "name": "localutils", "command": "npx", "args": ["localutils-mcp-server"] }
Использование MCP-инспектора
Вы можете протестировать сервер с помощью MCP Inspector:
pnpm run inspectorЭто запустит MCP Inspector по адресу http://localhost:5173 .
Доступные инструменты
get_time_and_date
Возвращает текущее местное время и дату в различных форматах, включая:
Местное время
Местная дата
День недели
Формат ISO 8601
Временная метка Unix
get_hostname
Возвращает имя хоста машины, на которой запущен сервер MCP.
get_public_ip
Возвращает публичный IP-адрес машины, на которой запущен сервер MCP.
list_directory
Выводит список содержимого указанного каталога.
Параметры:
path(строка, обязательно): Путь к каталогу для списка
get_node_version
Возвращает информацию о версии Node.js среды, в которой работает сервер MCP.
check_port
Проверяет, какой процесс запущен на определенном порту.
Параметры:
port(число или строка, обязательно): Номер порта для проверки (1-65535). Строковые значения будут автоматически преобразованы в числа.
Пример ответа (macOS/Linux):
{
"processes": [
{
"command": "node",
"pid": "12345",
"user": "username",
"fd": "12u",
"type": "IPv4",
"device": "0x1234567890",
"size": "0t0",
"node": "TCP",
"name": "*:3000 (LISTEN)"
}
],
"message": "Found 1 process(es) using port 3000"
}think
Записывает новую мысль с отметкой времени.
Параметры:
thought(строка, обязательно): содержание мысли для записи
Пример ответа:
{
"success": true,
"data": {
"message": "Thought recorded successfully"
}
}get_thoughts
Извлекает все записанные мысли.
Пример ответа:
{
"success": true,
"data": {
"thoughts": [
{
"timestamp": "2025-03-24T15:00:00.000Z",
"content": "Need to update the documentation"
}
]
}
}clear_thoughts
Очищает все записанные мысли.
Пример ответа:
{
"success": true,
"data": {
"message": "All thoughts cleared"
}
}get_thought_stats
Возвращает статистику записанных мыслей.
Пример ответа:
{
"success": true,
"data": {
"totalThoughts": 1,
"averageLength": 28,
"oldestThought": "2025-03-24T15:00:00.000Z",
"newestThought": "2025-03-24T15:00:00.000Z"
}
}Разработка
Здание
pnpm run buildРабота в режиме разработки
pnpm run devТестирование
pnpm testРабочий процесс Git
Этот репозиторий включает в себя pre-commit hook, который автоматически собирает сервер перед каждым коммитом. Это гарантирует, что файлы сборки всегда будут актуальны в репозитории.
Папка сборки включена в репозиторий git, чтобы упростить использование пакета с npx без необходимости его предварительной сборки.
Чтобы настроить pre-commit hook после клонирования репозитория:
pnpm installЭто установит зависимости и настроит pre-commit hook через Husky.
Лицензия
Массачусетский технологический институт
Available Tools
10 toolscheck_portD
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | Port number to check (1-65535) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_thoughtsA
Clear all recorded thoughts
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a destructive action (clearing all thoughts) but does not disclose behavioral traits like permanence, undo capability, or confirmation requirements. Since no annotations are provided, the description carries the full burden, which is only partially met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous information, efficiently conveying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description fully specifies what the tool does. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the input schema coverage is 100%. The description adds no parameter information, but with zero parameters, a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Clear all recorded thoughts' uses a specific verb ('clear') and resource ('recorded thoughts'), clearly distinguishing it from sibling tools like 'get_thoughts' (retrieval) and 'think' (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the purpose is clear, the description provides no guidance on when to use this tool versus alternatives (e.g., using 'get_thoughts' first) or warnings about irreversible action. However, for a simple deletion tool, the lack of detailed guidelines is less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hostnameA
Returns the hostname of the machine running the MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only states what is returned; no additional behavioral context (e.g., side effects, caching, permissions). Acceptable for a simple getter but does not exceed minimal expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose. No wasted words; efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and a straightforward purpose, the description fully covers what the tool does. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters; baseline for no params is 4. The description does not need to add param details and adds no redundant information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'returns' and the resource 'hostname of the machine running the MCP server'. It distinguishes from siblings like get_public_ip which returns an IP address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or alternatives, but the simplicity of the tool makes usage obvious. Lacks exclusions or when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_versionA
Returns the Node.js version information of the environment running the MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must convey behavioral traits. The description indicates a read-only operation via 'Returns', which is sufficient for this simple retrieval tool. It does not mention side effects, but none are expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the purpose, with no extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no input parameters, no output schema, no complex behavior), the description covers all necessary context for an agent to understand and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline score is 4. No additional parameter description is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb 'Returns' and specifies the resource 'Node.js version information of the environment running the MCP server', which is distinct from sibling tools like get_hostname or get_public_ip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidelines or alternatives are given, but the purpose is self-explanatory: use it to get the Node.js version. For a simple tool, this implied usage is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_public_ipA
Returns the public IP address of the machine running the MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the basic behavior but does not disclose any potential side effects, network dependencies, or caching behavior. Since no annotations are present, the description carries full burden but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that conveys all necessary information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is complete enough: it explains the return value clearly and provides sufficient context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with 0 parameters; schema description coverage is 100%, so baseline is 4. No parameter information is needed, and the description adds nothing beyond.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the public IP address of the server, with a specific verb and resource. It is distinct from sibling tools like get_hostname and get_node_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance is provided, but the tool is simple and self-contained with no alternatives, making its usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thoughtsB
Retrieve all recorded thoughts
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description lacks behavioral details such as output format, ordering, or limits. Minimal disclosure beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four-word sentence is maximally concise and front-loaded with the action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and no annotations, the description is minimally adequate but leaves out return format and relationship to siblings like get_thought_stats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so description cannot add value beyond schema. Baseline 3 is appropriate as it does not contradict or confuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Retrieve' and resource 'all recorded thoughts', distinguishing from siblings like think (create) and get_thought_stats (statistics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use vs alternatives like get_thought_stats or clear_thoughts. Agent must infer usage from name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thought_statsC
Get statistics about recorded thoughts
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get statistics' implies a read operation with no side effects, but it does not disclose behavior for edge cases (e.g., empty thought list), performance implications, or whether it modifies any state. Minimal behavioral info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks detail. It could be more informative without being verbose, e.g., specifying 'count, average, etc.'. Still, it is front-loaded and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description is incomplete. It does not clarify what statistics are returned (e.g., count of thoughts, time range, average length). For a tool with no parameters, the description should provide a clearer picture of the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the input schema is fully covered. The description adds no parameter-specific meaning, but according to rules, baseline for 0 params is 4. No information is missing about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get statistics about recorded thoughts', which is a verb+resource pattern. It distinguishes from siblings like 'get_thoughts' (which likely returns the full list) and 'think' (which creates a thought). However, it remains vague about what specific statistics are returned (e.g., count, frequency).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention that it provides summary data compared to 'get_thoughts' listing all thoughts, nor does it suggest prerequisites like 'think' first. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_and_dateA
Returns the current time, date, day of week, and timestamp in various formats
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses that the tool returns multiple pieces of data but does not specify the exact formats or whether the result is a single object or separate values. For a simple read-only tool, this is adequate but could be more precise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that conveys all necessary information without any wasted words. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description provides a good overview of what is returned. However, it could be improved by specifying the return format (e.g., JSON object) or listing the exact formats. Despite this, it is sufficient for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is fully covered (100%). Following the guidelines, a baseline score of 4 is appropriate since the description adds no param information, but none is needed. The description implicitly confirms no inputs required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns current time, date, day of week, and timestamp in various formats. It uses a specific verb ('Returns') and resource ('current time, date...') and distinguishes itself from sibling tools that provide other system information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like get_hostname or get_public_ip. However, the purpose is self-explanatory, so usage is implied. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directoryD
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Directory path to list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thinkD
| Name | Required | Description | Default |
|---|---|---|---|
| thought | Yes | The thought content to record |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- First observed
check_port - First observed
clear_thoughts - First observed
get_hostname - First observed
get_node_version - First observed
get_public_ip - First observed
get_thought_stats - First observed
get_thoughts - First observed
get_time_and_date - First observed
list_directory - First observed
think
TDQS
Scored across 10 tools
Each tool has a distinct name and purpose, even though some lack descriptions. The 'get_*' tools clearly differentiate between hostname, node version, public IP, time/date, and thoughts, while 'list_directory', 'check_port', and the thought management tools are all distinct.
All tool names follow a consistent lowercase_snake_case pattern, predominantly using verb_noun structure (e.g., 'get_hostname', 'list_directory', 'clear_thoughts'). The single verb 'think' is a minor deviation but still fits the pattern.
10 tools is a reasonable number for a local utilities server, covering both system information and a thought management module without overloading the surface.
The thought management tools are complete, but the system utilities are sparse, lacking common operations like disk space, CPU usage, or process listing. This leaves notable gaps for a 'Local Utilities' server.
Maintenance
Related MCP Connectors
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
1Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceA comprehensive MCP server with 30+ custom tools organized into categories: date/time operations, file management, system information, text processing, and web operations. Enables async communication with robust error handling and flexible CLI integration.311MIT
- AlicenseNot gradedqualityDmaintenanceA self-contained, dependency-free MCP server that provides utility tools for time, date, mathematical calculations, and shell command execution. It supports remote connectivity through SSE and is designed for easy deployment via Docker.GPL 3.0
- FlicenseAqualityDmaintenanceA general-purpose MCP server providing time-related utilities such as fetching current time, Unix timestamps, and formatting services. It supports both local stdio and remote SSE communication modes for versatile AI client integration.3-
- AlicenseNot gradedqualityDmaintenanceLightweight MCP server providing system time tools (current time, date, datetime, time components, unix timestamp) for LLM applications.1MIT