Skip to content

Commit 5df177d

Browse files
Merge pull request #1 from agencyenterprise/staging
Staging -> Main
2 parents ecb6fce + 25a04e6 commit 5df177d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+5063
-1587
lines changed

.env.example

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
# Server Configuration
12
NODE_ENV=development
23
PORT=3000
3-
DATABASE_URL=postgresql://user:password@host:5432/fathom_mcp
44
BASE_URL=https://your-app.railway.app
55

6+
# Database
7+
DATABASE_URL=postgresql://user:password@host:5432/fathom_mcp
8+
9+
# Token Encryption (generate with: openssl rand -hex 32)
10+
TOKEN_ENCRYPTION_KEY=your_64_character_hex_key_here
11+
612
# Fathom OAuth (from your Fathom app settings)
7-
FATHOM_CLIENT_ID=your_client_id
8-
FATHOM_CLIENT_SECRET=your_client_secret
13+
FATHOM_CLIENT_ID=your_fathom_client_id
14+
FATHOM_CLIENT_SECRET=your_fathom_client_secret
15+
16+
# Claude/MCP Client OAuth Callback
17+
CLAUDE_AUTH_CALLBACK_URL=https://claude.ai/oauth/callback

.github/workflows/ci.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
branches: [main, staging]
6+
push:
7+
branches: [main, staging]
8+
9+
jobs:
10+
lint:
11+
name: Lint & Type Check
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- uses: actions/setup-node@v4
17+
with:
18+
node-version: 20
19+
cache: "npm"
20+
21+
- name: Install dependencies
22+
run: npm ci
23+
24+
- name: Lint
25+
run: npm run lint
26+
27+
- name: Type check
28+
run: npx tsc --noEmit
29+
30+
build:
31+
name: Build
32+
runs-on: ubuntu-latest
33+
steps:
34+
- uses: actions/checkout@v4
35+
36+
- uses: actions/setup-node@v4
37+
with:
38+
node-version: 20
39+
cache: "npm"
40+
41+
- name: Install dependencies
42+
run: npm ci
43+
44+
- name: Build
45+
run: npm run build

.gitignore

Lines changed: 20 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,32 @@
1-
# Logs
2-
logs
3-
*.log
4-
npm-debug.log*
5-
yarn-debug.log*
6-
yarn-error.log*
7-
lerna-debug.log*
8-
9-
# Diagnostic reports (https://nodejs.org/api/report.html)
10-
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11-
12-
# Runtime data
13-
pids
14-
*.pid
15-
*.seed
16-
*.pid.lock
17-
18-
# Directory for instrumented libs generated by jscoverage/JSCover
19-
lib-cov
20-
21-
# Coverage directory used by tools like istanbul
22-
coverage
23-
*.lcov
24-
25-
# nyc test coverage
26-
.nyc_output
27-
28-
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29-
.grunt
30-
31-
# Bower dependency directory (https://bower.io/)
32-
bower_components
33-
34-
# node-waf configuration
35-
.lock-wscript
36-
37-
# Compiled binary addons (https://nodejs.org/api/addons.html)
38-
build/Release
39-
40-
# Dependency directories
1+
# Dependencies
412
node_modules/
42-
jspm_packages/
43-
44-
# Snowpack dependency directory (https://snowpack.dev/)
45-
web_modules/
46-
47-
# TypeScript cache
48-
*.tsbuildinfo
49-
50-
# Optional npm cache directory
51-
.npm
52-
53-
# Optional eslint cache
54-
.eslintcache
55-
56-
# Optional stylelint cache
57-
.stylelintcache
583

59-
# Optional REPL history
60-
.node_repl_history
4+
# Build output
5+
dist/
616

62-
# Output of 'npm pack'
63-
*.tgz
64-
65-
# Yarn Integrity file
66-
.yarn-integrity
67-
68-
# dotenv environment variable files
7+
# Environment files
698
.env
709
.env.*
7110
!.env.example
7211

73-
# parcel-bundler cache (https://parceljs.org/)
74-
.cache
75-
.parcel-cache
76-
77-
# Next.js build output
78-
.next
79-
out
80-
81-
# Nuxt.js build / generate output
82-
.nuxt
83-
dist
84-
85-
# Gatsby files
86-
.cache/
87-
# Comment in the public line in if your project uses Gatsby and not Next.js
88-
# https://nextjs.org/blog/next-9-1#public-directory-support
89-
# public
90-
91-
# vuepress build output
92-
.vuepress/dist
93-
94-
# vuepress v2.x temp and cache directory
95-
.temp
96-
.cache
97-
98-
# Sveltekit cache directory
99-
.svelte-kit/
100-
101-
# vitepress build output
102-
**/.vitepress/dist
103-
104-
# vitepress cache directory
105-
**/.vitepress/cache
106-
107-
# Docusaurus cache and generated files
108-
.docusaurus
109-
110-
# Serverless directories
111-
.serverless/
112-
113-
# FuseBox cache
114-
.fusebox/
115-
116-
# DynamoDB Local files
117-
.dynamodb/
12+
# Logs
13+
*.log
14+
npm-debug.log*
11815

119-
# Firebase cache directory
120-
.firebase/
16+
# TypeScript cache
17+
*.tsbuildinfo
12118

122-
# TernJS port file
123-
.tern-port
19+
# IDE
20+
.vscode/*
21+
!.vscode/settings.json
22+
.idea/
12423

125-
# Stores VSCode versions used for testing VSCode extensions
126-
.vscode-test
24+
# OS
25+
.DS_Store
26+
Thumbs.db
12727

128-
# yarn v3
129-
.pnp.*
130-
.yarn/*
131-
!.yarn/patches
132-
!.yarn/plugins
133-
!.yarn/releases
134-
!.yarn/sdks
135-
!.yarn/versions
28+
# Drizzle
29+
drizzle/meta/
13630

137-
# Vite logs files
138-
vite.config.js.timestamp-*
139-
vite.config.ts.timestamp-*
31+
# Test coverage
32+
coverage/

.prettierignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
dist
2+
node_modules
3+
drizzle
4+
package-lock.json

.prettierrc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"semi": true,
3+
"singleQuote": false,
4+
"tabWidth": 2,
5+
"trailingComma": "all",
6+
"printWidth": 80
7+
}

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@
2323
"**/drizzle/meta/**": true,
2424
"**/*.gen.ts": true
2525
}
26-
}
26+
}

CONTRIBUTING.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Contributing to Fathom MCP
2+
3+
Thanks for your interest in contributing!
4+
5+
## Development Setup
6+
7+
Fathom OAuth apps require HTTPS redirect URIs, so you'll need to deploy to test the full OAuth flow.
8+
9+
### 1. Fork and Deploy
10+
11+
1. Fork this repository
12+
2. Deploy to [Railway](https://railway.app) (free tier works)
13+
3. Add a PostgreSQL database to your project
14+
4. Set environment variables (see README)
15+
16+
### 2. Create Your Own Fathom OAuth App
17+
18+
1. Go to [Fathom Developer Portal](https://developers.fathom.ai/oauth)
19+
2. Register a new app pointing to your deployed URL
20+
3. Set redirect URI: `https://your-app.railway.app/oauth/fathom/callback`
21+
22+
### 3. Initialize Database Schema
23+
24+
After adding a PostgreSQL database to your Railway project (step 1.3) and copying `DATABASE_URL` to your local `.env`, create the tables:
25+
26+
```bash
27+
npm run db:push
28+
```
29+
30+
This connects to your Railway database and creates the required tables.
31+
32+
### 4. Test Your Changes
33+
34+
1. Make changes locally
35+
2. Push to your fork (Railway auto-deploys)
36+
3. Test via Claude Desktop connected to your deployment
37+
38+
## Code Style
39+
40+
- Run `npm run ci` before committing (runs lint, typecheck, and build)
41+
- Run `npm run format` to auto-format with Prettier
42+
- Follow existing patterns in the codebase
43+
44+
## Project Structure
45+
46+
```
47+
src/
48+
├── db/ # Database schema and connection
49+
├── middleware/ # Express middleware (auth, errors, logging, rate limiting)
50+
├── modules/ # Feature modules
51+
│ ├── fathom/ # Fathom API integration
52+
│ ├── oauth/ # OAuth flow handling
53+
│ └── sessions/ # MCP session management
54+
├── routes/ # Express route definitions
55+
├── shared/ # Shared config, constants, errors, schemas
56+
├── tools/ # MCP tool definitions and handlers
57+
└── utils/ # Utility functions
58+
```
59+
60+
## Pull Requests
61+
62+
1. Create a feature branch from `main`
63+
2. Make your changes
64+
3. Run `npm run ci` to ensure all checks pass
65+
4. Submit a PR with a clear description of what changed and why
66+
67+
## Reporting Issues
68+
69+
- Check existing issues first
70+
- Include steps to reproduce
71+
- Include relevant error messages or logs
72+
73+
## Questions?
74+
75+
Open an issue or discussion if something is unclear.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Jeff Patterson at AE Studio
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)