Scientific Computation MCP
Proporciona herramientas para el cálculo científico, incluyendo almacenamiento de tensores, álgebra lineal, cálculo vectorial y visualización.
Documentación
Scientific Computation MCP
Guía de instalación
El servidor utiliza HTTP transmisible. Añádelo desde Smithery con la CLI de Smithery (Node 20+):
npm install -g smithery@latest
smithery mcp add @aman-amith-shastry/scientific_computation_mcp --client claude
El espacio de nombres está en minúsculas. La búsqueda en el registro de Smithery distingue entre mayúsculas y minúsculas, y la ortografía con mayúsculas mixtas se resuelve como un registro vacío sin herramientas en lugar de fallar directamente, por lo que un nombre capitalizado parece un servidor sin capacidades.
Cambia --client cursor por Cursor, o elimina --client para añadirlo como una conexión remota de Smithery. Reinicia el cliente después para que detecte el servidor.
Ejecución local
uv sync
uv run src/main.py
El endpoint de MCP está en http://localhost:8081/mcp y una sonda de actividad en http://localhost:8081/health. Anulaciones de entorno: PORT, HOST, MCP_PATH, ALLOWED_ORIGINS, LOG_LEVEL.
Despliegue
Smithery ya no compila ni aloja contenedores: los servidores se publican como una URL que el gateway de Smithery utiliza como proxy, o como un paquete MCPB para stdio local. Este servidor se publica por URL, por lo que el contenedor se ejecuta en cualquier host que pueda servir HTTPS.
docker build -t scientific-computation-mcp .
docker run -p 8081:8081 -e PORT=8081 scientific-computation-mcp
Dos restricciones que el host debe cumplir:
- Una sola instancia. Los tensores viven en la memoria del proceso entre llamadas a herramientas, por lo que escalar más allá de una sola réplica divide el almacenamiento y rompe los flujos de
create_tensor→view_tensor. - Las sesiones deben sobrevivir. El transporte se ejecuta con estado (
stateless_http=False) y el almacén de tensores está vinculado por sesión de MCP, lo que evita que usuarios concurrentes lean los tensores de otros.
Alojamiento en Render
render.yaml despliega el Dockerfile como un servicio web de plan gratuito único. En el panel de Render: Nuevo → Blueprint, luego selecciona este repositorio. Render inyecta PORT, termina TLS y sondea /health; no se requiere otra configuración.
Las instancias gratuitas se apagan después de 15 minutos sin tráfico entrante y tardan aproximadamente un minuto en volver. Una sesión de MCP abierta no lo evita: el flujo HTTP transmisible es de servidor a cliente, por lo que una sesión inactiva no envía nada entrante y el servicio se duerme. Dos consecuencias que vale la pena planificar:
- Los tensores no sobreviven a un intervalo de 15 minutos entre llamadas a herramientas. El almacenamiento está en la memoria del proceso, por lo que un apagado lleva la sesión y sus tensores juntos. El uso activo mantiene el servicio activo, ya que cada llamada a herramienta es tráfico entrante; una pausa larga a mitad del análisis no.
- Los escaneos en el momento de la publicación pueden caer en una instancia dormida. Smithery escanea la URL como
SmitheryBot/1.0, y un arranque en frío puede superar su tiempo de espera. Calienta/healthprimero.
El nivel gratuito también otorga 750 horas de instancia por espacio de trabajo al mes frente a un mes de ~730 horas, por lo que un servicio gratuito en ejecución continua apenas cabe y un segundo no.
Cualquier host que mantenga un proceso siempre activo evita todo esto: el contenedor es HTTP simple en $PORT sin suposiciones específicas de plataforma.
Publicación
curl -sS -o /dev/null -w '%{http_code}\n' https://<your-host>/health
smithery mcp publish "https://<your-host>/mcp" -n @aman-amith-shastry/scientific_computation_mcp
El servidor no acepta configuración de usuario, por lo que no se necesita un esquema de configuración.
Componentes del servidor
Herramientas
Almacenamiento de tensores
create_tensor: Crea un nuevo tensor basado en un nombre, forma y valores dados, y lo añade al almacén de tensores. Para los fines de este servidor, los tensores son vectores y matrices.view_tensor: Muestra el contenido de un tensor del almacén.delete_tensor: Elimina un tensor según su nombre en el almacén de tensores.
Álgebra lineal
add_matrices: Suma dos matrices con los nombres proporcionados, si son compatibles.subtract_matrices: Resta dos matrices con los nombres proporcionados, si son compatibles.multiply_matrices: Multiplica dos matrices con los nombres proporcionados, si son compatibles.scale_matrix: Escala una matriz del nombre proporcionado por un cierto factor, en el lugar por defecto.matrix_inverse: Calcula la inversa de la matriz con el nombre proporcionado.transpose: Calcula la transpuesta de la inversa de la matriz del nombre proporcionado.determinant: Calcula el determinante de la matriz del nombre proporcionado.rank: Calcula el rango (número de pivotes) de la matriz del nombre proporcionado.compute_eigen: Calcula los vectores propios y valores propios de la matriz del nombre proporcionado.qr_decompose: Calcula la factorización QR de la matriz del nombre proporcionado. Las columnas de Q son una base ortonormal para la imagen de la matriz, y R es triangular superior.svd_decompose: Calcula la Descomposición en Valores Singulares de la matriz del nombre proporcionado.find_orthonormal_basis: Encuentra una base ortonormal para la matriz del nombre proporcionado. Los vectores devueltos son todos ortogonales por pares y de longitud unitaria.change_basis: Calcula la matriz del nombre proporcionado en la nueva base.
Cálculo vectorial
vector_project: Proyecta un vector del almacén de tensores al vector especificado en el mismo espacio vectorial.vector_dot_product: Calcula el producto punto de dos vectores en los almacenes de tensores según sus nombres proporcionados.vector_cross_product: Calcula el producto cruz de dos vectores en los almacenes de tensores según sus nombres proporcionados.gradient: Computes the gradient of a multivariable function based on the input function. Example call:gradient("x^2 + 2xyz + zy^3"). Do NOT include the function name (like f(x, y, z) = ...`).curl: Computes the curl of a vector field based on the input vector field. The input string must be formatted as a python list. Example call:curl("[3xy, 2z^4, 2y]"").divergenceComputes the divergence of a vector field based on the input vector field. The input string must be formatted as a python list. Example call:divergence("[3xy, 2z^4, 2y]"").laplacianComputes the laplacian of a scalar function (as the divergence of the gradient) or a vector field (where a component-wise laplacian is computed). If a scalar function is the input, it must be input in the same format as in thegradienttool. If the input is a vector field, it must be input in the same manner as thecurl/divergenceherramientas.directional_deriv: Computes the directional derivative of a function in a given directionuBy default, the tool normalizesubefore computing the directional derivative, as specified by theunitparámetro.
Visualización
plot_vector_field: Traza un campo vectorial (especificado en el mismo formato que en las funciones de rotacional/divergencia). Actualmente, solo se admiten campos vectoriales 3D. Se devuelve una imagen PNG en perspectiva 2D del campo vectorial. Por defecto, los límites del gráfico son de -1 a 1 en cada eje.plot_function: Plots a function in 2d or 3d (based on the input variables), specified in the same format as in thegradientherramienta. Solo se pueden usar las variables x e y.
