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

MseeP.ai Security Assessment Badge

Scientific Computation MCP

smithery badge

Verified on MseeP

MCP Badge

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_tensorview_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 /health primero.

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 the gradient tool. If the input is a vector field, it must be input in the same manner as the curl/divergence herramientas.
  • directional_deriv: Computes the directional derivative of a function in a given direction u By default, the tool normalizes u before computing the directional derivative, as specified by the unit pará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 the gradient herramienta. Solo se pueden usar las variables x e y.