diff --git a/src/gdrive/Dockerfile b/src/gdrive/Dockerfile index b7bb2a76..8a3458f4 100644 --- a/src/gdrive/Dockerfile +++ b/src/gdrive/Dockerfile @@ -16,9 +16,14 @@ WORKDIR /app COPY --from=builder /app/dist /app/dist COPY --from=builder /app/package.json /app/package.json COPY --from=builder /app/package-lock.json /app/package-lock.json +COPY src/gdrive/replace_open.sh /replace_open.sh ENV NODE_ENV=production RUN npm ci --ignore-scripts --omit-dev +RUN sh /replace_open.sh + +RUN rm /replace_open.sh + ENTRYPOINT ["node", "dist/index.js"] \ No newline at end of file diff --git a/src/gdrive/README.md b/src/gdrive/README.md index 56e8cfbe..bb200dd4 100644 --- a/src/gdrive/README.md +++ b/src/gdrive/README.md @@ -31,8 +31,9 @@ The server provides access to Google Drive files: 3. [Configure an OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) ("internal" is fine for testing) 4. Add OAuth scope `https://www.googleapis.com/auth/drive.readonly` 5. [Create an OAuth Client ID](https://console.cloud.google.com/apis/credentials/oauthclient) for application type "Desktop App" -6. Download the JSON file of your client's OAuth keys -7. Rename the key file to `gcp-oauth.keys.json` and place into the root of this repo (i.e. `servers/gcp-oauth.keys.json`) +6. Add http://localhost:3000/oauth2callback as a redirect URI +7. Download the JSON file of your client's OAuth keys +8. Rename the key file to `gcp-oauth.keys.json` and place into the root of this repo (i.e. `servers/gcp-oauth.keys.json`) Make sure to build the server with either `npm run build` or `npm run watch`. @@ -51,12 +52,24 @@ To integrate this server with the desktop app, add the following to your app's s #### Docker +Authentication: + +Assuming you have completed setting up the OAuth application on Google Cloud, you can now auth the server with the following command, replacing `/path/to/gcp-oauth.keys.json` with the path to your OAuth keys file: + +```bash +docker run -i --rm --mount type=bind,source=/path/to/gcp-oauth.keys.json,target=/gcp-oauth.keys.json -v mcp-gdrive:/gdrive-server -e GDRIVE_OAUTH_PATH=/gcp-oauth.keys.json -e "GDRIVE_CREDENTIALS_PATH=/gdrive-server/credentials.json" -p 3000:3000 mcp/gdrive auth +``` + +The command will print the URL to open in your browser. Open this URL in your browser and complete the authentication process. The credentials will be saved in the `mcp-gdrive` volume. + +Once authenticated, you can use the server in your app's server configuration: + ```json { "mcpServers": { "gdrive": { "command": "docker", - "args": ["run", "-i", "--rm", "--mount", "type=bind,source=/Users/colinmcneil/Desktop/gcp-oauth.keys.json,target=/gcp-oauth.keys.json", "-v", "mcp-gdrive:/gdrive-server", "-e", "GDRIVE_OAUTH_PATH=/gcp-oauth.keys.json", "-e", "GDRIVE_CREDENTIALS_PATH=/gdrive-server/credentials.json", "mcp/gdrive"] + "args": ["run", "-i", "--rm", "-v", "mcp-gdrive:/gdrive-server", "-e", "GDRIVE_CREDENTIALS_PATH=/gdrive-server/credentials.json", "mcp/gdrive"] } } } diff --git a/src/gdrive/replace_open.sh b/src/gdrive/replace_open.sh new file mode 100644 index 00000000..6727854b --- /dev/null +++ b/src/gdrive/replace_open.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +# Basic script to replace opn(authorizeUrl, { wait: false }).then(cp => cp.unref()); with process.stdout.write(`Open this URL in your browser: ${authorizeUrl}`); + +sed -i 's/opn(authorizeUrl, { wait: false }).then(cp => cp.unref());/process.stderr.write(`Open this URL in your browser: ${authorizeUrl}\n`);/' node_modules/@google-cloud/local-auth/build/src/index.js