Scientific Computation MCP
About
Provides tools for scientific computation, including tensor storage, linear algebra, vector calculus, and visualization.
Details
- Transport
- SSE
Explore
Setup
Install Scientific Computation MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/aman-amith-shastry/scientific_computation_mcp
Follow the installation instructions in the repository README, then restart your MCP client.
create_tensor
Creates a NumPy array (matrix) with a specified shape and values. Args: shape (list[int]): The shape of the resulting array as a tuple(e.g., (2, 3)). values (list[float]): A flat list of values to populate the array. name (str): The name of the tensor to be stored. Returns: Tensor: The stored tensor as nested lists. Raises: ValueError: If the number of values does not match the product of the shape.
view_tensor
Returns an immutable view of a previously stored NumPy tensor from the in-memory tensor store. Args: name (str): The name of the tensor as stored in the in-store dictionary Returns: Tensor: The stored tensor as nested lists. Raises: ValueError: If the tensor name is not found in the store.
delete_tensor
Deletes a tensor from the in-memory tensor store. Args: name (str): The name of the tensor to delete. Returns: str: Confirmation that the tensor was removed. Raises: ValueError: If the tensor name is not found in the store or if an error occurs during deletion.
add_matrices
Adds two stored tensors element-wise, computing name_a + name_b. Args: name_a (str): The name of the first tensor. name_b (str): The name of the second tensor. Returns: Tensor: The result of element-wise addition. Raises: ValueError: If the tensor names are not found or shapes are incompatible.
subtract_matrices
Subtracts one stored tensor from another element-wise, computing name_a - name_b. Args: name_a (str): The name of the tensor to subtract from (the minuend). name_b (str): The name of the tensor to subtract (the subtrahend). Returns: Tensor: The result of element-wise subtraction. Raises: ValueError: If the tensor names are not found or shapes are incompatible.
multiply_matrices
Performs matrix multiplication between two stored tensors, computing name_a @ name_b. Args: name_a (str): The name of the first tensor. name_b (str): The name of the second tensor. Returns: Tensor: The result of matrix multiplication. Raises: ValueError: If either tensor is not found or their shapes are incompatible.
scale_matrix
Scales a stored tensor by a scalar factor. Args: name (str): The name of the tensor to scale. scale_factor (float): The scalar value to multiply the tensor by. in_place (bool): If True, updates the stored tensor; otherwise, returns a new scaled tensor. Returns: Tensor: The scaled tensor. Raises: ValueError: If the tensor name is not found in the store.
matrix_inverse
Computes the inverse of a stored square matrix. Args: name (str): The name of the tensor to invert. Returns: Tensor: The inverse of the matrix. Raises: ValueError: If the matrix is not found, is not square, or is singular (non-invertible).
transpose
Computes the transpose of a stored tensor. Args: name (str): The name of the tensor to transpose. Returns: Tensor: The transposed tensor. Raises: ValueError: If the tensor name is not found in the store.
determinant
Computes the determinant of a stored square matrix. Args: name (str): The name of the matrix. Returns: float: The determinant of the matrix. Raises: ValueError: If the matrix is not found or is not square.
rank
Computes the rank of a stored tensor. Args: name (str): The name of the tensor. Returns: int | list[int]: The rank of the matrix. Raises: ValueError: If the tensor name is not found in the store.
compute_eigen
Computes the eigenvalues and right eigenvectors of a stored square matrix. Args: name (str): The name of the tensor to analyze. Returns: dict: A dictionary with keys: - 'eigenvalues': list of eigenvalues - 'eigenvectors': list of right eigenvectors, one per column of the result Raises: ValueError: If the tensor is not found or is not a square matrix.
qr_decompose
Computes the QR decomposition of a stored matrix. Decomposes the matrix A into A = Q @ R, where Q is an orthogonal matrix and R is an upper triangular matrix. Args: name (str): The name of the matrix to decompose. Returns: dict: A dictionary with keys: - 'q': the orthogonal matrix Q, as nested lists - 'r': the upper triangular matrix R, as nested lists Raises: ValueError: If the mat…
svd_decompose
Computes the Singular Value Decomposition (SVD) of a stored matrix. Decomposes the matrix A into A = U @ S @ V^T, where U and V^T are orthogonal matrices, and S is a diagonal matrix of singular values. Args: name (str): The name of the matrix to decompose. Returns: dict: A dictionary with keys: - 'u': the left singular vectors, as nested lists - 's': the singular values, as a flat list -…
find_orthonormal_basis
Finds an orthonormal basis for the column space of a stored matrix using QR decomposition. Args: name (str): The name of the matrix. Returns: list[list[float]]: A list of orthonormal basis vectors. Raises: ValueError: If the matrix is not found or decomposition fails.
change_basis
Changes the basis of a stored square matrix. Args: name (str): Name of the matrix in the tensor store. new_basis (list[list[float]]): Columns are new basis vectors. Returns: Tensor: Representation of the matrix in the new basis. Raises: ValueError: If the matrix name is not found or non-invertible.
vector_project
Projects a stored vector onto another vector. Args: name (str): Name of the stored vector to project. new_vector (list[float]): The vector to project onto. Returns: Tensor: The projection result vector. Raises: ValueError: If the vector name is not found or projection fails.
vector_dot_product
Computes the dot product between two stored vectors. Args: name_a (str): Name of the first vector in the tensor store. name_b (str): Name of the second vector in the tensor store. Returns: float: Scalar result of the dot product. Raises: ValueError: If either vector is not found or if the dot product computation fails.
vector_cross_product
Computes the cross product of two stored vectors. Args: name_a (str): Name of the first vector in the tensor store. name_b (str): Name of the second vector in the tensor store. Returns: Tensor: Vector result of the cross product. Raises: ValueError: If either vector is not found or if the cross product computation fails.
gradient
Computes the symbolic gradient of a scalar function. Args: f_str (str): A string representing a scalar function (e.g., "x**2 + y*z"). Returns: str: A string representation of the symbolic gradient as a vector.
curl
Computes the symbolic curl of a vector field, optionally evaluated at a point. Args: f_str (str): A string representing the vector field in list format (e.g., "[x+y, x, 2*z]"). point (list[float], optional): A list of coordinates [x, y, z] to evaluate the curl numerically. Returns: dict: A dictionary with the symbolic curl as a string, and optionally the evaluated vector.
divergence
Computes the symbolic divergence of a vector field, optionally evaluated at a point. Args: f_str (str): A string representing the vector field in list format (e.g., "[x+y, x, 2*z]"). point (list[float], optional): A list of coordinates [x, y, z] to evaluate the divergence numerically. Returns: dict: A dictionary with the symbolic divergence as a string, and optionally the evaluated scalar.
laplacian
Computes the Laplacian of a scalar or vector field symbolically. Args: f_str (str): Scalar function as "x**2 + y*z" or vector "[Fx, Fy, Fz]". is_vector (bool): Set True to compute vector Laplacian. Returns: str: Symbolic result of the Laplacian—scalar or list of 3 components.
directional_deriv
Computes symbolic directional derivative of scalar field along a vector direction. Args: f_str (str): Expression like "x*y*z". u (list[float]): Direction vector [vx, vy, vz]. unit (bool): True if u should be normalized before calculating directional derivative. Set to True by default. Returns: str: Symbolic result as string.
plot_vector_field
Plots a 3D vector field from a string "[u(x,y,z), v(x,y,z), w(x,y,z)]" Args: f_str: string representation of 3D field, e.g. "[z, -y, x]". bounds: (xmin, xmax, ymin, ymax, zmin, zmax) n: grid resolution per axis Returns: Displayed Matplotlib 3D quiver plot (no image return needed)
plot_function
Plots a 2D or 3D mathematical function from a symbolic expression string. Args: expr_str: string representation of a function in x or x and y, e.g. "x**2" or "sin(sqrt(x**2 + y**2))" xlim: (xmin, xmax) range for x-axis ylim: (ymin, ymax) range for y-axis (used in 2D or 3D) grid: resolution of the plot grid Returns: A rendered Image of the function using Matplotlib. - 2D plot if the …
The server speaks streamable HTTP. Add it from Smithery with the Smithery CLI (Node 20+):
npm install -g smithery@latest smithery mcp add @aman-amith-shastry/scientific_computation_mcp --client claude
The namespace is lowercase. Smithery's registry lookup is case-sensitive, and the mixed-case spelling resolves to an empty record with no tools rather than failing outright, so a capitalized name looks like a server with no capabilities.
Swap--client cursorfor Cursor, or drop--clientto add it as a remote Smithery connection. Restart the client afterwards so it picks up the server.
The MCP endpoint is athttp://localhost:8081/mcpand a liveness probe athttp://localhost:8081/health. Environment overrides:PORT,HOST,MCP_PATH,ALLOWED_ORIGINS,LOG_LEVEL.
Smithery no longer builds or hosts containers — servers are published either as a URL that Smithery's gateway proxies to, or as an MCPB bundle for local stdio. This server is published by URL, so the container runs on any host that can serve HTTPS.
docker build -t scientific-computation-mcp . docker run -p 8081:8081 -e PORT=8081 scientific-computation-mcp
- One instance.Tensors live in process memory between tool calls, so scaling past a single replica splits the store and breakscreate_tensor→view_tensorflows.
- Sessions must survive.The transport runs stateful (stateless_http=False) and the tensor store is keyed per MCP session, which is what keeps concurrent users from reading each other's tensors.
Free instances spin down after 15 minutes withoutinboundtraffic and take roughly a minute to come back. An open MCP session does not prevent this: the streamable-HTTP stream is server-to-client, so an idle session sends nothing inbound and the service sleeps out from under it. Two consequences worth planning around:
- Tensors do not survive a 15-minute gap between tool calls.The store is in process memory, so a spin-down takes the session and its tensors together. Active use keeps the service up, since each tool call is inbound traffic; a long pause mid-analysis does not.
- Publish-time scans can land on a sleeping instance.Smithery scans the URL asSmitheryBot/1.0, and a cold start can outrun its timeout. Warm/healthfirst.
The free tier also grants 750 instance-hours per workspace per month against a ~730-hour month, so one continuously running free service just fits and a second does not.
Any host that keeps one process always on avoids all of this — the container is plain HTTP on$PORTwith no platform-specific assumptions.
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
The server takes no user configuration, so no config schema is needed.
- create_tensor: Creates a new tensor based on a given name, shape, and values, and adds it to the tensor store. For the purposes of this server, tensors are vectors and matrices.
- view_tensor: Display the contents of a tensor from the store .
- delete_tensor: Deletes a tensor based on its name in the tensor store.
- add_matrices: Adds two matrices with the provided names, if compatible.
- subtract_matrices: Subtracts two matrices with the provided names, if compatible.
- multiply_matrices: Multiplies two matrices with the provided names, if compatible.
- scale_matrix: Scales a matrix of the provided name by a certain factor, in-place by default.
- matrix_inverse: Computes the inverse of the matrix with the provided name.
- transpose: Computes the transpose of the inverse of the matrix of the provided name.
- determinant: Computes the determinant of the matrix of the provided name.
- rank: Computes the rank (number of pivots) of the matrix of the provided name.
- compute_eigen: Calculates the eigenvectors and eigenvalues of the matrix of the provided name.
- qr_decompose: Computes the QR factorization of the matrix of the provided name. The columns of Q are an orthonormal basis for the image of the matrix, and R is upper triangular.
- svd_decompose: Computes the Singular Value Decomposition of the matrix of the provided name.
- find_orthonormal_basis: Finds an orthonormal basis for the matrix of the provided name. The vectors returned are all pair-wise orthogonal and are of unit length.
- change_basis: Computes the matrix of the provided name in the new basis.
- vector_project: Projects a vector in the tensor store to the specified vector in the same vector space
- vector_dot_product: Computes the dot product of two vectors in the tensor stores based on their provided names.
- vector_cross_product: Computes the cross product of two vectors in the tensor stores based on their provided names.
- 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]"").divergence
- Computes 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]"").laplacian
- Computes 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/divergencetools.directional_deriv
- : Computes the directional derivative of a function in a given directionuBy default, the tool normalizesubefore computing the directional derivative, as specified by theunitparameter.
- plot_vector_field: Plots a vector field (specified in the same format as in the curl/divergence functions). Currently, only 3d vector fields are supported. A 2d png perspective image of the vector field is returned. By default, the bounds of the graph are from -1 to 1 on each axis.plot_function
- : Plots a function in 2d or 3d (based on the input variables), specified in the same format as in thegradient`tool. Only the variables x and y can be used.
This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.
Connect bugAgent to any MCP-compatible AI client. File, classify, and manage bugs, feature requests, and more directly from your AI coding assistant. No context switching, no copy-paste — just describe the issue and bugAgent handles the rest.
his repository contains a fully functional MCP (Model Context Protocol) server, providing solutions for Constraint Satisfaction Problems (CSP) and Linear Programming (LP). It is based on the gurddy package and supports solving a variety of classic problems.
Paid remote MCP for Codex run ledgers, changed-file evidence, scope summaries, missing proof checks, and client-ready handoff receipts.
An MCP server for initial app planning and creating a good starting point for an app.
A context management system designed for software development teams with customizable data storage.
A development management tool for project planning, task management, and development workflows.
An AI-powered server that facilitates feature discussions between developers and AI, acting as a lead developer to guide implementation and architectural decisions.
Headless form infrastructure — forms render natively in your product (no iframe), files upload browser-direct to storage you own, and a coding agent can provision, publish, and query them over MCP.
A command-line tool to run MCP servers from a single file, with support for automatic dependency resolution, environment setup, and package installation from local or S3 sources.
Converts a USER-STORIES.md file into README, ROADMAP, and SYSTEM-ARCHITECTURE documents for the GenSpec workflow.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



