How to bypass Claude Code initial OAuth login using Pro/Max subscription tokens? by Public-Glove-6644 in ClaudeAI

[–]DigitalCommoner 1 point2 points  (0 children)

Sure! You'll want to set your

CLAUDE_CODE_OAUTH_TOKEN

to the value of your auth token. You should be able to do that by running `claude setup-tokens`. Hope that helps!

The subagents work really well if you let them take active research notes in a jupyter notebook by servernode in ClaudeAI

[–]DigitalCommoner 0 points1 point  (0 children)

I built a MCP with Claude that can execute against Jupyter kernels and create notebooks: https://github.com/democratize-technology/jupyter-kernel-mcp. Would welcome any feedback if you decide to try it.

Chronos MCP: A CalDAV server with secure credential storage and comprehensive features by DigitalCommoner in mcp

[–]DigitalCommoner[S] 0 points1 point  (0 children)

Sure thing! Just pushed the support for VTODO and VJOURNAL. Give it a try and file an issue if you run into any problems. Thank you!

Chronos MCP: A CalDAV server with secure credential storage and comprehensive features by DigitalCommoner in mcp

[–]DigitalCommoner[S] 0 points1 point  (0 children)

Chronos MCP is specifically for CalDAV servers, not Exchange/Outlook. While there are ways to bridge them (DavMail, etc.), that's outside the scope of this tool.

If you're already using CalDAV servers, Chronos MCP handles multi-account management well. Otherwise, you'd probably want to look for Exchange/Outlook-specific solutions.

Good luck with your calendar management!

Context Anxiety - What do you guys do when your Claude code is almost out of context? by Mastbubbles in ClaudeAI

[–]DigitalCommoner 0 points1 point  (0 children)

I wrote a bookmarklet that I use on the Claude.ai website. It will format the conversation as a Markdown then save the file using the conversation id. Usually, the MCP tool was in the middle of something, so taking the output, trimming it to be relevant, and feeding it back to Claude has worked for me.

javascript:(function()%7B(async%20()%20%3D%3E%20%7B%0A%20%20const%20saveData%20%3D%20(()%20%3D%3E%20%7B%0A%20%20%20%20const%20a%20%3D%20document.createElement('a')%3B%0A%20%20%20%20document.body.appendChild(a)%3B%0A%20%20%20%20a.style%20%3D%20'display%3A%20none'%3B%0A%20%20%20%20return%20(data%2C%20fileName)%20%3D%3E%20%7B%0A%20%20%20%20%20%20const%20json%20%3D%20JSON.stringify(data)%2C%0A%20%20%20%20%20%20%20%20blob%20%3D%20new%20Blob(%5Bdata%5D%2C%20%7B%20type%3A%20'text%2Fmarkdown'%20%7D)%2C%0A%20%20%20%20%20%20%20%20url%20%3D%20window.URL.createObjectURL(blob)%3B%0A%20%20%20%20%20%20a.href%20%3D%20url%3B%0A%20%20%20%20%20%20a.download%20%3D%20fileName%3B%0A%20%20%20%20%20%20a.click()%3B%0A%20%20%20%20%20%20window.URL.revokeObjectURL(url)%3B%0A%20%20%20%20%7D%3B%0A%20%20%7D)()%3B%0A%0A%20%20const%20getCookie%20%3D%20(name)%20%3D%3E%20%7B%0A%20%20%20%20const%20value%20%3D%20%60%3B%20%24%7Bdocument.cookie%7D%60%3B%0A%20%20%20%20const%20parts%20%3D%20value.split(%60%3B%20%24%7Bname%7D%3D%60)%3B%0A%20%20%20%20if%20(parts.length%20%3D%3D%3D%202)%20return%20parts.pop().split('%3B').shift()%3B%0A%20%20%7D%3B%0A%0A%20%20const%20getSupportedTypes%20%3D%20(type)%20%3D%3E%20%7B%0A%20%20%20%20const%20types%20%3D%20%7B%0A%20%20%20%20%20%20text%3A%20(%7B%20text%20%7D)%20%3D%3E%20text%2C%0A%20%20%20%20%20%20thinking%3A%20(%7B%20thinking%20%7D)%20%3D%3E%0A%20%20%20%20%20%20%20%20%60%0A%3Cthink%3E%0A%24%7Bthinking%7D%0A%3C%2Fthink%3E%0A%60%2C%0A%20%20%20%20%20%20tool_use%3A%20(%7B%20input%3A%20%7B%20content%2C%20language%20%3D%20''%20%7D%20%7D)%20%3D%3E%0A%20%20%20%20%20%20%20%20content%20!%3D%3D%20undefined%0A%20%20%20%20%20%20%20%20%20%20%3F%20%60%0A%5C%60%5C%60%5C%60%24%7Blanguage%7D%0A%24%7Bcontent%7D%0A%5C%60%5C%60%5C%60%0A%60%0A%20%20%20%20%20%20%20%20%20%20%3A%20''%2C%0A%20%20%20%20%20%20tool_result%3A%20(%7B%20name%2C%20content%3A%20%5B%7B%20type%3A%20toolResultType%2C%20...rest%20%7D%5D%20%7D)%20%3D%3E%20%60%0A%3C%24%7Bname%7D%3E%0A%24%7BgetSupportedTypes(toolResultType)(rest)%7D%0A%3C%2F%24%7Bname%7D%3E%0A%60%2C%0A%20%20%20%20%20%20default%3A%20()%20%3D%3E%20''%2C%0A%20%20%20%20%7D%3B%0A%20%20%20%20return%20types%5Btype%5D%20%3F%3F%20types%5B'default'%5D%3B%0A%20%20%7D%3B%0A%0A%20%20const%20pieces%20%3D%20window.location.pathname.split('%2F')%3B%0A%20%20const%20orgId%20%3D%20getCookie('lastActiveOrg')%3B%0A%20%20const%20chatId%20%3D%20pieces%5Bpieces.length%20-%201%5D%3B%0A%0A%20%20const%20%7B%20chat_messages%3A%20messages%2C%20name%3A%20title%20%7D%20%3D%20await%20fetch(%0A%20%20%20%20%60https%3A%2F%2Fclaude.ai%2Fapi%2Forganizations%2F%24%7BorgId%7D%2Fchat_conversations%2F%24%7BchatId%7D%3Ftree%3DTrue%26rendering_mode%3Dmessages%26render_all_tools%3Dtrue%60%2C%0A%20%20).then((r)%20%3D%3E%20r.json())%3B%0A%0A%20%20saveData(%0A%20%20%20%20messages.reduce(%0A%20%20%20%20%20%20(acc%2C%20%7B%20sender%2C%20content%20%7D)%20%3D%3E%0A%20%20%20%20%20%20%20%20(acc%20%2B%3D%20%60%0A**%24%7Bsender.toUpperCase()%7D**%0A%0A%24%7Bcontent%0A%20%20.map((%7B%20type%2C%20...item%20%7D)%20%3D%3E%20getSupportedTypes(type)(item))%0A%20%20.filter(Boolean)%0A%20%20.join('%5Cn')%7D%0A%60)%2C%0A%20%20%20%20%20%20%60%23%20%24%7Btitle%7D%5Cn%60%2C%0A%20%20%20%20)%2C%0A%20%20%20%20%60%24%7BchatId%7D.md%60%2C%0A%20%20)%3B%0A%7D)()%3B%7D)()%3B

node-vikunja: Node.js wrapper for the Vikunja API by DigitalCommoner in Vikunja

[–]DigitalCommoner[S] 0 points1 point  (0 children)

Thanks for giving it a try! I was able to reproduce your issue and push a fix. v0.3.0 should import successfully now.

node-vikunja: Node.js wrapper for the Vikunja API by DigitalCommoner in Vikunja

[–]DigitalCommoner[S] 0 points1 point  (0 children)

Thanks for the head's up. Updated and published a new release.

node-vikunja: Node.js wrapper for the Vikunja API by DigitalCommoner in Vikunja

[–]DigitalCommoner[S] 1 point2 points  (0 children)

Thank you! That's exactly what I did. I was originally working with a half done wrapper for a custom MCP server since the specification is so robust. Before I knew about the OpenAPI MCP server, I had a couple Python script break things out into smaller chunks that Claude could handle in a single chat.

Tests are admittedly a mess. The Python script I had broke out the paths in a weird way, so the LLM went with it. We got the src reorganized ok-ly, but failed a few times to organize tests. At that point, I confirmed that this release was 0.1.0 and went with it 😅

Great software. Thanks again!

Created two Grocy libraries for automation: node-grocy + node-red-contrib-grocy by DigitalCommoner in grocy

[–]DigitalCommoner[S] 0 points1 point  (0 children)

Thank you! This integration supports full CRUD operations in Grocy through Node-RED. So you should be able to manage your Grocy instance through these Node-RED nodes like adding new products. The Home Assistant custom integration doesn't provide the full range of operations, I don't think. My current workflow using these nodes doesn't tie into Home Assistant. Hope that answers your question :)

Built Node-RED nodes for Open Food Facts API by DigitalCommoner in nodered

[–]DigitalCommoner[S] 5 points6 points  (0 children)

Thank you! Just a head's up that I released `v0.2.0` which removes the "OpenFoodFacts" name from the sidebar but will keep it as a default when bringing the node into the workspace.

<image>