Scientific Computation MCP
Fornece ferramentas para computação científica, incluindo armazenamento de tensores, álgebra linear, cálculo vetorial e visualização.
Documentação
Scientific Computation MCP
Guia de Instalação
O servidor fala HTTP streamable. Adicione-o pelo Smithery com a CLI do Smithery (Node 20+):
npm install -g smithery@latest
smithery mcp add @aman-amith-shastry/scientific_computation_mcp --client claude
O namespace é em minúsculas. A busca no registro do Smithery diferencia maiúsculas de minúsculas, e a grafia com maiúsculas resolve para um registro vazio sem ferramentas, em vez de falhar diretamente, então um nome capitalizado parece um servidor sem capacidades.
Troque --client cursor por Cursor, ou remova --client para adicioná-lo como uma conexão remota do Smithery. Reinicie o cliente depois para que ele reconheça o servidor.
Executando Localmente
uv sync
uv run src/main.py
O endpoint MCP está em http://localhost:8081/mcp e uma sonda de atividade em http://localhost:8081/health. Substituições de ambiente: PORT, HOST, MCP_PATH, ALLOWED_ORIGINS, LOG_LEVEL.
Implantação
O Smithery não constrói nem hospeda mais contêineres — os servidores são publicados como uma URL que o gateway do Smithery faz proxy, ou como um pacote MCPB para stdio local. Este servidor é publicado por URL, então o contêiner roda em qualquer host que possa servir HTTPS.
docker build -t scientific-computation-mcp .
docker run -p 8081:8081 -e PORT=8081 scientific-computation-mcp
Duas restrições que o host deve atender:
- Uma única instância. Tensores vivem na memória do processo entre chamadas de ferramentas, então escalar além de uma única réplica divide o armazenamento e quebra os fluxos de
create_tensor→view_tensor. - As sessões devem sobreviver. O transporte roda com estado (
stateless_http=False) e o armazenamento de tensores é indexado por sessão MCP, o que mantém usuários concorrentes de ler os tensores uns dos outros.
Hospedando no Render
render.yaml implanta o Dockerfile como um serviço web de plano gratuito único. No painel do Render: New → Blueprint, depois selecione este repositório. O Render injeta PORT, encerra TLS e faz sondas em /health; nenhuma outra configuração é necessária.
Instâncias gratuitas desligam após 15 minutos sem tráfego de entrada e levam cerca de um minuto para voltar. Uma sessão MCP aberta não impede isso: o stream HTTP streamable é do servidor para o cliente, então uma sessão ociosa não envia nada de entrada e o serviço dorme por baixo dela. Duas consequências para planejar:
- Tensores não sobrevivem a uma lacuna de 15 minutos entre chamadas de ferramentas. O armazenamento está na memória do processo, então um desligamento leva a sessão e seus tensores juntos. Uso ativo mantém o serviço de pé, pois cada chamada de ferramenta é tráfego de entrada; uma pausa longa no meio da análise não.
- Varreduras no momento da publicação podem cair em uma instância adormecida. O Smithery varre a URL como
SmitheryBot/1.0, e uma inicialização a frio pode exceder seu tempo limite. Aqueça/healthprimeiro.
O nível gratuito também concede 750 horas de instância por workspace por mês contra um mês de ~730 horas, então um serviço gratuito rodando continuamente cabe exatamente e um segundo não.
Qualquer host que mantenha um processo sempre ativo evita tudo isso — o contêiner é HTTP simples em $PORT sem suposições específicas de plataforma.
Publicação
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
O servidor não aceita configuração do usuário, então nenhum esquema de configuração é necessário.
Componentes do Servidor
Ferramentas
Armazenamento de tensores
create_tensor: Cria um novo tensor com base em um nome, formato e valores fornecidos, e o adiciona ao armazenamento de tensores. Para os fins deste servidor, tensores são vetores e matrizes.view_tensor: Exibe o conteúdo de um tensor do armazenamento.delete_tensor: Exclui um tensor com base em seu nome no armazenamento de tensores.
Álgebra Linear
add_matrices: Soma duas matrizes com os nomes fornecidos, se compatíveis.subtract_matrices: Subtrai duas matrizes com os nomes fornecidos, se compatíveis.multiply_matrices: Multiplica duas matrizes com os nomes fornecidos, se compatíveis.scale_matrix: Escala uma matriz do nome fornecido por um certo fator, no lugar por padrão.matrix_inverse: Calcula a inversa da matriz com o nome fornecido.transpose: Calcula a transposta da inversa da matriz do nome fornecido.determinant: Calcula o determinante da matriz do nome fornecido.rank: Calcula o posto (número de pivôs) da matriz do nome fornecido.compute_eigen: Calcula os autovetores e autovalores da matriz do nome fornecido.qr_decompose: Calcula a fatoração QR da matriz do nome fornecido. As colunas de Q são uma base ortonormal para a imagem da matriz, e R é triangular superior.svd_decompose: Calcula a Decomposição em Valores Singulares da matriz do nome fornecido.find_orthonormal_basis: Encontra uma base ortonormal para a matriz do nome fornecido. Os vetores retornados são todos ortogonais entre si e têm comprimento unitário.change_basis: Calcula a matriz do nome fornecido na nova base.
Cálculo Vetorial
vector_project: Projeta um vetor no armazenamento de tensores para o vetor especificado no mesmo espaço vetorial.vector_dot_product: Calcula o produto escalar de dois vetores nos armazenamentos de tensores com base em seus nomes fornecidos.vector_cross_product: Calcula o produto vetorial de dois vetores nos armazenamentos de tensores com base em seus nomes fornecidos.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/divergenceferramentas.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.
Visualização
plot_vector_field: Plota um campo vetorial (especificado no mesmo formato das funções de rotacional/divergência). Atualmente, apenas campos vetoriais 3D são suportados. Uma imagem png 2D em perspectiva do campo vetorial é retornada. Por padrão, os limites do gráfico são de -1 a 1 em cada eixo.plot_function: Plots a function in 2d or 3d (based on the input variables), specified in the same format as in thegradientferramenta. Apenas as variáveis x e y podem ser usadas.
