ワンクリックで
configure-local-modules
Configura la ruta de módulos MCP locales privados en ~/.fs-claude.json
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Configura la ruta de módulos MCP locales privados en ~/.fs-claude.json
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | configure-local-modules |
| description | Configura la ruta de módulos MCP locales privados en ~/.fs-claude.json |
Este skill configura la ruta de módulos MCP privados en ~/.fs-claude.json (el archivo de configuración unificado de fs-claude), y te guía para crear módulos nuevos.
Los módulos locales son herramientas MCP que solo tú usas — endpoints privados de tu empresa, integraciones con otros sistemas, o tools específicas de tu instalación de FacturaScripts. Se almacenan en tu máquina y nunca se suben a GitHub.
El servidor MCP lee settings.localModulesPath de ~/.fs-claude.json al arrancar. Si la ruta existe, carga automáticamente todos los módulos dentro. No requiere configuración de variables de entorno.
Ejecuta este comando para saber si ya tienes una ruta configurada:
import json
from pathlib import Path
fs_claude = Path.home() / '.fs-claude.json'
if fs_claude.exists():
config = json.loads(fs_claude.read_text(encoding='utf-8'))
path = config.get('settings', {}).get('localModulesPath', '')
print(f"Ruta configurada: {path}" if path else "Sin ruta configurada")
else:
print("~/.fs-claude.json no existe aún")
Usa esa ruta directamente. Confirma al usuario que el servidor MCP la cargará al reiniciar y muestra su contenido actual.
Pregunta al usuario si quiere:
~/fs-claude-mcp-private/ automáticamentePara crear la carpeta por defecto y registrarla:
import json
from pathlib import Path
fs_claude = Path.home() / '.fs-claude.json'
modules_dir = Path.home() / 'fs-claude-mcp-private'
# Crear el directorio si no existe
modules_dir.mkdir(exist_ok=True)
print(f"Carpeta creada: {modules_dir}")
# Actualizar ~/.fs-claude.json
config = json.loads(fs_claude.read_text(encoding='utf-8')) if fs_claude.exists() else {
"version": "1.0",
"connections": {"default": "", "connections": {}},
"settings": {"sortClassMembers": True, "updateCopyright": True}
}
config.setdefault('settings', {})['localModulesPath'] = str(modules_dir)
fs_claude.write_text(json.dumps(config, indent=2, ensure_ascii=False), encoding='utf-8')
print(f"Ruta guardada en: {fs_claude}")
Para usar una ruta existente, reemplaza modules_dir con la ruta que proporcione el usuario.
Después de configurar la ruta, reinicia Claude para que el servidor MCP la cargue:
claude de nuevoAl arrancar verás en los logs:
[local-loader] ✓ Módulo local cargado: mi-modulo
[local-loader] 1 módulo(s) local(es) cargado(s) desde: /ruta/a/tu/carpeta
El directorio soporta dos niveles de organización:
fs-claude-mcp-private/
mi-modulo/
index.js ← único archivo necesario
metadata.js ← opcional, si se genera con sync-models
otro-modulo/
index.js
fs-claude-mcp-private/
MiGrupo/
manifest.json ← configuración del grupo (para sync-models)
descriptions.json ← descripciones de columnas del grupo (para sync-models)
mi-modulo/
index.js
metadata.js
otro-modulo/
index.js
OtroGrupo/
manifest.json
descriptions.json
tercer-modulo/
index.js
Puedes mezclar ambas formas en el mismo directorio.
Cuando el usuario quiera añadir un módulo nuevo, pregunta siempre:
¿Quieres crear el módulo en la raíz del directorio de módulos, o dentro de una subcarpeta existente (grupo)?
- En la raíz: el módulo va directamente en
<modules-dir>/nombre-modulo/- En un grupo: el módulo va en
<modules-dir>/NombreGrupo/nombre-modulo/
Si elige grupo, pregunta el nombre del grupo (carpeta). Si ya existe el grupo, el manifest.json y descriptions.json deben actualizarse añadiendo el nuevo modelo. Si no existe el grupo, se crean ambos archivos nuevos.
Reglas sobre los archivos de configuración:
manifest.json y descriptions.json — nunca con sufijos de nombre.index.js de un módulo// Registra las tools de este módulo en el servidor MCP
export async function registerTools(toolsMap) {
toolsMap.set('nombre_de_mi_tool', {
name: 'nombre_de_mi_tool',
description: 'Descripción de lo que hace',
inputSchema: {
type: 'object',
properties: {
connection: { type: 'string', description: 'Clave de conexión' },
limit: { type: 'number', description: 'Máximo de resultados', default: 50 },
offset: { type: 'number', description: 'Paginación', default: 0 },
// Declara cada filtro como un parámetro propio (recomendado):
idproject: { type: 'number', description: 'Filtrar por proyecto' },
nombre: { type: 'string', description: 'Filtrar por nombre (búsqueda parcial)' },
},
required: [],
},
});
}
// Maneja la llamada a la tool. Devuelve null si no es tu tool.
export async function handleTool(name, args, client) {
if (name !== 'nombre_de_mi_tool') return null;
const result = await client.get('/mi-endpoint', {
limit: args.limit ?? 50,
offset: args.offset ?? 0,
idproject: args.idproject, // se envía como filter[idproject]
nombre_like: args.nombre, // se envía como filter[nombre_like] (LIKE)
}, args.connection);
return {
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
};
}
El parámetro client ya viene configurado con las conexiones de ~/.fs-claude.json — no necesitas importar nada.
La API REST de FacturaScripts solo aplica filtros con la sintaxis filter[campo]=valor. Los parámetros sueltos en la URL (?idproject=1) se ignoran en silencio (la consulta devuelve todo). Para evitar este error, client.get(endpoint, params, connection) envuelve automáticamente cada clave de params como filter[clave]=valor, salvo las reservadas offset, limit, sort y operation (que se pasan tal cual) y las claves que ya vengan en notación de corchetes (filter[...]).
Por tanto, basta con pasar cada campo de filtro directamente en el objeto params (patrón recomendado, idéntico al de las tools del servidor principal). Los valores null/undefined se omiten automáticamente, así que puedes pasar args.idproject aunque sea opcional.
Operadores — añade un sufijo al nombre del campo:
| Sufijo | Operador | Ejemplo (clave en params) |
|---|---|---|
| (ninguno) | = | idproject: 1 |
_like | LIKE (búsqueda parcial; el core envuelve con %…%) | nombre_like: 'forja' |
_gt / _gte | > / >= | price_gte: 100 |
_lt / _lte | < / <= | creationdate_lte: '2025-12-31' |
_neq | != | type_neq: 'private' |
_null / _notnull | IS NULL / IS NOT NULL | idparent_null: 1 |
Si filtras por una columna que no existe en el modelo, la API responde con error
api: fields not allowed: <campo>.
Para ordenar usa sort[campo]: { 'sort[creationdate]': 'DESC' }.
~/.fs-claude.json ya tiene settings.localModulesPath~/fs-claude-mcp-private/~/.fs-claude.json con la ruta elegida¿Listo? Dime si tienes ya una carpeta de módulos o si quiero que cree la carpeta por defecto.
Crea un modelo de FacturaScripts con su clase PHP y archivo XML de tabla.
Redacta en pantalla (sin crear ningún archivo) un texto en formato markdown, listo para copiar y pegar, que explica las novedades, mejoras y correcciones de un plugin o proyecto de FacturaScripts a partir de un rango de commits o de versiones. Activa esta skill siempre que el usuario pida "redacta las novedades", "escribe la noticia de los cambios", "genera el changelog", "qué ha cambiado desde la versión X", "resume los cambios entre la versión X y la Y", "prepara el anuncio de la nueva versión", o cualquier variación en la que se pida comunicar qué se ha hecho en un rango de commits o entre dos versiones.
Guía para añadir una nueva conexión de FacturaScripts al archivo de configuración
Sincroniza modelos del MCP fs-mcp con sus fuentes (FacturaScripts core o plugins privados). Detecta columnas nuevas/modificadas/eliminadas, mantiene las descripciones unificadas en los archivos de overrides, regenera la metadata y compila si hace falta. Soporta uno o varios modelos, ruta local o URL de GitHub, y un modo "refresh masivo" para auditar todos los modelos del catálogo y actualizar la versión registrada de FacturaScripts.
Responde preguntas sobre cómo usar FacturaScripts consultando la documentación oficial de usuarios a través del agente especializado `docs-expert`. ACTIVAR SIEMPRE que el usuario pregunte cómo hacer una operación, dónde encontrar una función, cómo fluye un proceso (presupuesto→factura), cómo gestionar clientes, inventario, compras, contabilidad, o cualquier aspecto práctico de uso del ERP. También activar cuando Claude necesite explorar la documentación de usuario antes de responder sobre procedimientos — no esperar a que el usuario pregunte explícitamente. No esperes a que mencione "documentación" — si la pregunta o tarea involucra procedimientos operativos en FacturaScripts, activa esta skill.
Analiza y corrige bugs en plugins de FacturaScripts. ACTIVAR cuando el usuario describa un comportamiento incorrecto, algo que "no funciona como debería", un error inesperado, datos incorrectos generados por el código, o pida "revisa el plugin", "busca el error", "algo falla", "hay un problema con", "verifica el código", "comprueba dónde está el fallo". También activa cuando Claude necesite explorar código de un plugin FacturaScripts para entender su funcionamiento antes de modificarlo. No esperes a que el usuario use la palabra "bug" — cualquier descripción de comportamiento incorrecto o inesperado en un plugin de FacturaScripts activa esta skill. Orquesta docs-expert (comportamiento esperado según el framework), backend-developer (análisis y corrección del código) y testing-expert (test que reproduce y verifica la corrección del bug).