8import {getErrorMessage} from "../lib/errorUtils.ts";
9
10export function registerCliTools(server: McpServer, _config: Config) {
11 // Watch files in a project for real-time updates
12 server.tool(
8
9## Style Guidelines
10- Use TypeScript strict mode with explicit typing for function parameters/returns
11- 2-space indentation, semicolons at line ends
12- Use camelCase for variables/functions, PascalCase for types/interfaces, UPPER_SNAKE_CASE for constants
13- Tool names use kebab-case (e.g., `get-val`)
14- Document all public functions with JSDoc
15- Wrap async operations in try/catch blocks and use getErrorMessage utility
16- Return consistent error responses with isError flag
6import {z} from "npm:zod"
7
8export function registerBranchTools(server: McpServer, config: Config) {
9 // List all branches in a val
10 server.tool(
5import {getErrorMessage} from "../lib/errorUtils.ts"
6
7export function registerBlobTools(server: McpServer, config: Config) {
8 // List blobs
9 server.tool(
1import {Config} from "./types.ts"
2
3export async function callValTownApi(
4 config: Config,
5 path: string,
1import { generateResponses } from "@Dentalabcs/generateResponses";
2
3export async function twilioWebhook(req: Request) {
4 console.log("Webhook received:", req.method);
5
33- [x] fix wonky sidebar separator height problem (thanks to @stevekrouse)
34- [x] make result tables scrollable
35- [x] add export to CSV, and JSON (CSV and JSON helper functions written in [this val](https://www.val.town/v/nbbaier/sqliteExportHelpers). Thanks to @pomdtr for merging the initial version!)
36- [x] add listener for cmd+enter to submit query
37
66
67// Export the RouterProvider component with QueryClient
68export function RouterApp() {
69 return (
70 <QueryClientProvider client={queryClient}>
65### Query
66```tsx
67export function usePostMessage() {
68 return useMutation({
69 mutationFn: (content: string) => postMessage(content),
16In a normal server environment, you would likely use a middleware [like this one](https://hono.dev/docs/getting-started/nodejs#serve-static-files) to serve static files. Some frameworks or deployment platforms automatically make any content inside a `public/` folder public.
17
18However in Val Town you need to handle this yourself, and it can be suprisingly difficult to read and serve files in a Val Town Project. This template uses helper functions from [stevekrouse/utils/serve-public](https://www.val.town/x/stevekrouse/utils/branch/main/code/serve-public/README.md), which handle reading project files in a way that will work across branches and forks, automatically transpiles typescript to javascript, and assigns content-types based on the file's extension.
19
20### `index.html`
26## CRUD API Routes
27
28This app has two CRUD API routes: for reading and inserting into the messages table. They both speak JSON, which is standard. They import their functions from `/backend/database/queries.ts`. These routes are called from the React app to refresh and update data.
29
30## Errors
Simple functional CSS library for Val Town
A helper function to build a file's email
import { OpenAI } from "https://esm.town/v/std/openai";
export default async function(req: Request): Promise<Response> {
if (req.method === "OPTIONS") {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",
LangChain (https://langchain.com) Ambassador, KubeSphere (https://kubesphere.io) Ambassador, CNCF OpenFunction (https://openfunction.dev) TOC Member.